编程语言
首页 > 编程语言> > java-事务启动时的侦听器

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