【问题标题】:@EnableTransactionManagment annotation is not working with spring JtaTransactionManager@EnableTransactionManagment 注释不适用于 spring JtaTransactionManager
【发布时间】:2016-06-08 04:21:30
【问题描述】:

我实际上在我的 spring java 配置中使用了两个事务管理器对象 如下图

    @Bean("jtaTranx")
    public PlatformTransactionManager jtaTransactionMangaer(){ 
        return new JtaTransactionManager();
    }

    @Bean
    @Primary
    public PlatformTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager(entityManagerFactory());
        return transactionManager;
    }

使用@configuration 和@EnableTransactionManagment 注释的类级别。 当我尝试使用 @Transactional 进行一些事务时,我得到一个异常,在托管事务期间无法执行事务,谁能告诉我如何解决这个问题。

【问题讨论】:

  • 请添加失败的代码。
  • 为什么在使用 JTA 时需要 2 个事务管理器?在这种情况下,您应该只有一个。
  • 我们还需要查看错误。
  • 这是必需的,所以我碰巧实现了两个事务管理器。

标签: java spring transactions


【解决方案1】:

我能够使用 Embedded JtaTransactionManager 解决此问题。我采取了atomikos参考实现形式here

    @Bean
    @Primary
    public PlatformTransactionManager transactionManager() throws PropertyVetoException, NamingException {
        EntityManagerFactory factory = entityManagerFactory().getObject();
        return new JpaTransactionManager(factory);
    }

    @Bean(name = "jtaTransactionManager")   
    public PlatformTransactionManager jtaTransactionManager() throws Throwable {
      UserTransaction userTransaction = userTransaction() ;
      TransactionManager transactionManager = atomikosTransactionManager() ;
      return new JtaTransactionManager(userTransaction, transactionManager );
    }

    @Bean
    public UserTransaction userTransaction() throws Throwable {
        UserTransactionImp userTransactionImp = new UserTransactionImp();
        userTransactionImp.setTransactionTimeout(10000);
        return userTransactionImp;
    }

    @Bean(initMethod = "init", destroyMethod = "close")
    public TransactionManager atomikosTransactionManager() throws Throwable {
        UserTransactionManager userTransactionManager = new UserTransactionManager();
        userTransactionManager.setForceShutdown(false);
        return userTransactionManager;
    }

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2014-08-31
    • 2016-05-01
    • 2015-09-25
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多