SqlSession was not registered for synchronization because synchronization is not active問題的解決

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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章