Spring boot事务报错

1. 报错信息

系统错误,错误信息:org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'defaultTx' is expected to be of type 'org.springframework.transaction.PlatformTransactionManager' but was actually of type 'org.springframework.transaction.support.TransactionTemplate'2.

2. 原因

使用了自定义的事务模板,样例代码如下

 

    @Bean(name = TransactionConfig.DEFAULT_TX)
    @Primary
    public TransactionTemplate transaction(@Qualifier("firstDataSource") DataSource firstDataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(firstDataSource);
        return new TransactionTemplate(dataSourceTransactionManager);
    }

    @Bean(name = TransactionConfig.SECOND_TX)
    public TransactionTemplate secondTransaction(@Qualifier("secondDataSource") DataSource secondDataScoure) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(secondDataScoure);
        return new TransactionTemplate(dataSourceTransactionManager);
    }

 

 

3. 解决方法

    @Bean(name = DEFAULT_TX)
    @Primary
    public DataSourceTransactionManager firstDataSourceTransaction(@Qualifier("firstDataSource") DataSource firstDataSource) {
        return new DataSourceTransactionManager(firstDataSource);
    }

    @Bean(name = SECOND_TX)
    public DataSourceTransactionManager secondDataSourceTransaction(@Qualifier("secondDataSource") DataSource secondDataSource) {
        return new DataSourceTransactionManager(secondDataSource);
    }

4. 结语

使用自定义的事务管理器时,关注一下返回值是否为事务模板,如果是事务模板的话,使用方式就得改变了。
 
 
posted @ 2024-08-19 10:43  大稳·杨  阅读(21)  评论(0编辑  收藏  举报