• Java注解@Transa1ctional失效特殊情况


    最近接手了一个项目需要在上面新加一个模块,我这边直接把之前的模块复制一份改改,去掉多余的文件就开始写了,但是就在一小时前,我调试接口的时候突然就发现事务回滚失效了,准确的说是事务都没有正常开启,这他么的咋回事?

    因为刚接手这个项目才一周,它的架构也不是很熟,然后这个模块又很急需要一周做完,所以只能先常规问题检一遍,但是发现都不行
    直到刚刚我加了下面这个文件,这个是显示的配置数据源的,正常情况不需要配置

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.support.TransactionTemplate;
    
    import javax.sql.DataSource;
    
    @Configuration
    @EnableTransactionManagement
    public class TransactionManagerConfig {
    
        @Bean
        public PlatformTransactionManager transactionManager(DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean
        public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
            return new TransactionTemplate(transactionManager);
        }
    }
    

    然后报了个错

    [2024-06-14 19:50:01.038]  [ERROR  c.y.c.j.c.ExceptionController.globalException:86] ~~~~~~exception=No qualifying bean of type 'org.springframework.transaction.TransactionManager' available: expected single matching bean but found 2: transactionManager,rabbitTransactionManager
    org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.TransactionManager' available: expected single matching bean but found 2: transactionManager,rabbitTransactionManager
    
    

    重点在 expected single matching bean but found 2: transactionManager,rabbitTransactionManager
    发现了两个数据源,其中有一个是rabbitTransactionManager
    这样问题就好解决,既然是双数据导致的,那就指定一下数据源

    这里给它加个注解@Primary

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.support.TransactionTemplate;
    
    import javax.sql.DataSource;
    
    @Configuration
    @EnableTransactionManagement
    public class TransactionManagerConfig {
    
        @Bean
        @Primary
        public PlatformTransactionManager transactionManager(DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean
        public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
            return new TransactionTemplate(transactionManager);
        }
    }
    

    到这里这个问题就解决

    当然我还是很生气的,今天周五!现在八点了我还没下班!所以我又去之前复制的那个模块试了一下别人写的代码,我想知道我复制后是不是删了什么配置文件或者哪里没配置好才出现的这个问题,然后!他么的原模块事务就已经没有生效!!!法克!之前同事还跟我说这个项目二十多个人开发了两年,两年事务没生效没一个人发现?难怪原先做这个项目的公司倒闭了!活该啊!!!

  • 相关阅读:
    MyBatis-TypeHandler(数据类型转换)
    css实现圆形进度条
    day35 XSS跨站&反射&存储&DOM&盲打&劫持
    Spire.Office for Java 8.9.7 Crack
    基于ffmpeg进行视频解码
    GrapeCity Documents for Excel Java Crack
    WinSCP和PuTTY(与Linux系统链接的工具)的安装和使用(含下载地址)
    AI大模型高速发展,Web3还远吗?
    magical_spider远程采集方案
    CommonModule.dll动态链接库(DLL)文件丢失的处理方法
  • 原文地址:https://blog.csdn.net/cl617287/article/details/139689078