@EnableLoadTimeWeaving我在与 AspectJ + @Transactional+的组合中遇到问题@HystrixCommand。所以,我已经像这样配置了加载时编织:@EnableLoadTimeWeaving(aspectjWeaving = ENABLED)@EnableCaching(mode = AdviceMode.ASPECTJ)@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)加上仪器配置。我有一个 bean A,@Transactional在其中用和方法注释,用 注释@HystrixCommand。然后我有一个 bean B,也用 注释@Transactional,但是有propagation = Propagation.MANDATORY,这意味着它需要现有事务,否则失败。这个 bean 中还有一个方法,用@HystrixCommand.最终,当我从 bean A 的方法调用 bean B 的方法时,我得到:No existing transaction found for transaction marked with propagation 'mandatory'。我找了几个小时的问题:一切似乎都配置正确,所以我几乎放弃了。然后我只是试图@HystrixCommand从方法中删除。瞧:事务传播开始正常工作,异常消失了。所以我想知道:为什么会@HystrixCommand中断事务传播?它与我使用加载时编织的事实有某种关系吗?还是预期的行为?有人可以阐明一下吗?
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
HystrixCommands
您所说的问题可能与在隔离线程中执行的事实有关:
默认和推荐的设置是使用线程隔离 (THREAD) 运行 HystrixCommands,使用信号量隔离 (SEMAPHORE) 运行 HystrixObservableCommands。
在线程中执行的命令具有额外的保护层,以防止超出网络超时所能提供的延迟。
通常,只有当调用量如此之大(每个实例每秒数百次)以至于单独线程的开销太高时,您才应该为 HystrixCommands 使用信号量隔离;这通常只适用于非网络呼叫。
添加回答
举报
0/150
提交
取消