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