spring mybatis整合事务不起作用
程序员文章站
2022-04-08 20:01:34
...
今天同事在测试spring事务回滚的时候,发现事务回滚不了,使用的spring+mybatis,配置如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 基本的数据库连接配置 --> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.passwd}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <!-- 其他配置 --> <property name="maxPoolSize" value="30"></property> <property name="minPoolSize" value="10"></property> <!-- 关闭自动提交功能 --> <property name="autoCommitOnClose" value="false"></property> <!-- 连接超时时间 --> <property name="checkoutTimeout" value="1000"></property> <!-- 重试次数 --> <property name="acquireRetryDelay" value="2"></property> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 装配c3p0数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 导入mybatis全局配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 扫描entity包,使用别名 --> <property name="typeAliasesPackage" value="com.hs.ssi.entity"></property> <!-- 扫描sql映射文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"></property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 配置sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> <!-- 扫描dao接口包 --> <property name="basePackage" value="com.hs.ssi.dao"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/>
配置文件中也添加了注解扫描,使用aspectj实现动态代理,classpath中也添加了asm、aspectj相关的jar包,但还是不起作用,该配置的都配置了。
启动日志中发现有以下输出:
10:49:45.243 [Thread-10] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 10:49:45.246 [Thread-11] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession 10:49:45.246 [Thread-11] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4933e6d6] was not registered for synchronization because synchronization is not active 10:49:45.246 [Thread-10] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@6a437f45] will not be managed by Spring
应该是连接没有被spring管理到。找了很长时间,没找到原因。
后来重新整了个环境,相似的配置,新环境却可以。把两个环境对比了下,一点点对比,同事的环境是javaFX,用来做桌面开发的,交给spring管理的业务类实现了java8中的函数式接口,后来在新环境中测试了一下,定义了一个函数式接口,将新环境的业务类实现这个函数式接口,发现启动的时候报错了,spring没扫描到业务类,不知道为嘛扫描不到。问题找到了,也解决了,但是不知道为嘛实现函数式接口的业务类无法被扫描,正常情况下函数式接口也不是用来被实现的,而是方便使用lambda表达式操作的,以后得注意。
上一篇: Redis 事务
下一篇: JAVA基础 之 集合概述
推荐阅读
-
Spring Boot整合mybatis(一)实例代码
-
spring Boot与Mybatis整合优化详解
-
spring整合atomikos实现分布式事务的方法示例
-
Spring Boot + Kotlin整合MyBatis的方法教程
-
spring集成mybatis原理(spring和mybatis整合步骤)
-
Spring Boot+Mybatis的整合过程
-
MyBatis 与 Spring 的完美整合方法
-
Spring boot怎么整合Mybatis
-
spring boot整合mybatis+mybatis-plus的示例代码
-
Spring Boot入门系列八(SpringBoot 整合Mybatis)