SSM项目启动,控制台报了以下警告,
JDBC Connection XXX will not be managed by Spring和SqlSession was not registered for synchronization because synchronization is not active
意思是相关操作没有被事务管理起来,虽不影响项目功能正常使用,可每次启动看到这堆警告,导致强迫证又犯了,有一种非除之而后快件的冲动,于是检查配置文件中事务配置的部分,又上网搜索,经过一番测试,终于消除这些警告,下面是解决的过程。
在事务配置中我原先的代码:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception"/>
<tx:method name="insert*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="update*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="save*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
</tx:advice>
当时我的想法是只对数据操作中的增删改进行事务管理,查询就不管了,所以配置文件这里也只写了增删改的部分,然后控制台打印出来的警告都伴随在查询语句前面,因此,我上面的基础上增加以下查询管理部分:
<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
因为我的查询方法基本上都是以select 或get、find开头的,如此就囊括了项目中所有查询方法。保存后启动项目,执行相应操作,终于不再提示以上警告了。
除此以外,还有一点需要注意是这里:
<!-- 3. 配置事务切点, 并把切点和事务属性关联起来 -->
<aop:config>
<aop:pointcut expression="execution(* com.klt.xll.*.service.impl.*.*(..))"
id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
这里必须与项目结构相吻合,如果不吻合,也会导致以上警告。
以上*中,第一个*表示所有返回值,com开始这部分是项目的包结构,注意要和第一个*号用空格隔开,第2个*号匹配项目中所有业务名,如employee,我是采用每一个业务逻辑包,里面包含bean/mapper/service/impl/controller的结构。这里必须配成与自己项目包结构一致。参照下图:
第3个*号匹配所有serviceImpl 类,第4个*号匹配serviceImpl 类里所有的方法,(..)匹配方法里所有的参数。
下面时作出如上改动后运行的控制台打印出来的提示:
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16d2b19]
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@2ee05145] will be managed by Spring
ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@2ee05145]
==> Preparing: select id, action, data, user_id, ip, created from tb_logs order by created DESC limit 1, 5