java-事务启动时的侦听器
作者:互联网
我正在寻找一个干净的解决方案,以使事务开始时有一个侦听器.这意味着我希望侦听器在春天的上下文中是一个bean(组件),它将在启动新事务时从TransactionPlatformManager或Hibernate Session或类似的东西接收事务启动时的事件.
沿途:
@Component
class TransactionListener implements ?? {
@Autowired
private Something x;
public void onTransactionBegin(...) {
x.doSomething()
}
}
具体来说,我正在缓解系统范围的问题,我需要在事务开始时设置一个本地线程,以便可以在休眠实体的处理中进一步访问该本地线程以检索信息.
我调查了资料来源,发现没有任何痕迹可以实现.我发现的唯一解决方案是将HibernateTransactionManager及其doBegin()方法作为子类,但我认为它不是特别好.
解决方法:
Spring在其TransactionSynchronization中有一些事务回调,但是正如您正确地注意到的那样,没有用于事务启动的回调,这是我的错.
据我所知,Spring不会在事务开始时通知您,尽管这可能与PlatformTransactionManager的不同实现有所不同.如果您想参与Spring交易,相信您还有
>子类化事务管理器并调用一些回调
>使用spring-aop为@Transactional创建一个建议(很明显,这仅在使用注释时有效)
如果您使用的是Hibernate,那么您在https://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Interceptor.html#afterTransactionBegin(org.hibernate.Transaction)中的afterTransactionBegin可能会有些运气
标签:spring-transactions,hibernate,hibernate-session,spring,java 来源: https://codeday.me/bug/20191118/2029345.html