報SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7862f70e] was not registered for synchronization because synchronization is not active,網上各種查找原因沒找到,於是深入到org.apache.ibatis.session.defaults.DefaultSqlSession類與org.mybatis.spring.SqlSessionUtils類查看源碼(mybatis-3.2.8.jar),TransactionSynchronizationManager.isSynchronizationActive()返回false時報出的這個異常。
翻譯過來同步未激活,之前都好好的,為什么今天不能激活呢?是不是數據庫連接沒成功所以沒激活?
但若連接數據庫不成功不是報連接失敗嗎?今天沒報,懷疑着查看了一下數據庫配置,果然之前連的一個局域網今天沒開啟。
修改成正確的數據庫之后錯誤消失。可是仍不明白為啥沒報數據庫連接失敗
20180530:昨天在數據庫連接正常的情況下仍然報這個異常,發現未將事物配置切面
<!-- 面向切面配置 --> <aop:config> <!-- 定義切入點 --> <aop:pointcut expression="execution(* service..*.*(..) )" id="pointCut"/> <!-- pointcut和advice的配置器。是將advice注入程序中pointcut位置的代碼 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/> </aop:config>
其中txAdice定義了對事物的支持
<!-- 定義哪些方法需要事物支持 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 傳播行為 --> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice>
