MyBatis+Spring整合,事务配置出现will not be managed by Spring

yyil80 2017-09-19 10:14:22
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76ebf212] was not registered for synchronization because synchronization is not active
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c61b8bc] was not registered for synchronization because synchronization is not active
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6aa9548e] was not registered for synchronization because synchronization is not active
JDBC Connection [jdbc:mysql://localhost:3307/ge_test, UserName=root@localhost, MySQL Connector Java] will not be managed by Spring
JDBC Connection [jdbc:mysql://localhost:3307/ge_test, UserName=root@localhost, MySQL Connector Java] will not be managed by Spring
JDBC Connection [jdbc:mysql://localhost:3307/ge_test, UserName=root@localhost, MySQL Connector Java] will not be managed by Spring

控制台提示,我每次执行SQL的时候都会Creating a new SqlSession,这样是不是会严重的影像性能?我明明配置了事务,而且测试过事务是有效的,为什么还提示我事务没有交给spring管理呢?

事务配置代码:

<!-- 事务管理器配置 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 事务传播特性配置 -->
<tx:advice id="transactionAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="get*" read-only="true" />
</tx:attributes>
</tx:advice>

<!-- 配置哪些方法参与事务 -->
<aop:config proxy-target-class="true">
<aop:pointcut id="transactionxPointcut" expression="execution(* com.kwjq.web.service.*.*(..))" />
<aop:advisor advice-ref="transactionAdvice" pointcut-ref="transactionxPointcut" />
</aop:config>

亲自测试过,如果在Service里面执行2个dao方法,第一个执行完毕后,我手动抛出异常,是会回滚的。

请问各位,为什么会出现这样的情况?
问题一、为什么每次都Creating a new SqlSession,会不会影响性能?
问题二、明明配置了事务,确提示事务没有交给spring管理,求解。

谢谢各位大神,有满意答案就结贴给分。
...全文
13085 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2020-06-08
  • 打赏
  • 举报
回复
新版的 jdbc 支持异步交互,楼主尝试 开启同步交互,试一试。 spring的事务管理器,一般情况下是支持 同步交互 模式的jdbc数据源的,异步交互模式的连接池,我还没有玩过,不知道是否支持。
Girs 2020-06-06
  • 打赏
  • 举报
回复
问题一、为什么每次都Creating a new SqlSession,会不会影响性能?

为什么上文有人说正常,每次都重新new一个sqlSession,后面的日志应该也是每次都重新查询。这不是一级缓存没生效?还是我弄错了呢

我觉得两问题都不正常。

希望大神来扫盲。
yjsl__ 2018-05-19
  • 打赏
  • 举报
回复
Creating a new SqlSession mybatis官方就是这么和spring整合的,SqlSession是对Connection的封装,Connection都在池里呢,没什么影响 第二个就很迷了,大概是空闲连接,spring暂时不管?
  • 打赏
  • 举报
回复
直接 springboot 啊
YXY12312 2018-05-11
  • 打赏
  • 举报
回复
改成 这个 execution(* com.kwjq.web.service.*.impl.*.*(..))
yyil80 2017-09-19
  • 打赏
  • 举报
回复
千万不要让帖子沉了,谢谢好心人
yyil80 2017-09-19
  • 打赏
  • 举报
回复
大神们来帮我解决问题吧,自己顶起来
鲨鱼也是鱼 2017-09-19
  • 打赏
  • 举报
回复
很有可能你的mybatis-spring jar 没引入或者版本不对应
tianfang 2017-09-19
  • 打赏
  • 举报
回复
不在状态,错误不断
tianfang 2017-09-19
  • 打赏
  • 举报
回复
前面回答错了 你这个是spring没有整合好,org.springframework.jdbc.datasource.DataSourceTransactionManager 应该用 org.springframework.jdbc.datasource.DataSourceTransactionManager 参考: http://www.mybatis.org/spring/zh/transactions.html
yyil80 2017-09-19
  • 打赏
  • 举报
回复
引用 3 楼 q54244125 的回复:
纳尼?都是正常的?数据库连接是给spring进行管理的,我把数据库连接池的代码贴出来

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<!-- 初始化连接大小 -->
		<property name="initialSize" value="10"></property>
		<!-- 连接池最大数量 -->
		<property name="maxActive" value="50"></property>
		<!-- 连接池最大空闲 -->
		<property name="maxIdle" value="${jdbc.maxIdle}"></property>
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="${jdbc.minIdle}"></property>
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="${jdbc.maxWait}"></property>
	</bean>
tianfang 2017-09-19
  • 打赏
  • 举报
回复
问题一、为什么每次都Creating a new SqlSession,会不会影响性能? 那个是信息,就是在一个数据库连接上,启动事务,创建一个对象来管理事务,就是在数据库连接上发出transaction.start,对象来记录相关信息。对性能影响很少 问题二、明明配置了事务,确提示事务没有交给spring管理,求解 是连接不是spring管理的(应该是应用服务器上建立的),事务还是spring管理。也是正常的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧