這兩天一直在折騰一個小工具,非常簡單的移動端webapp。
用的是jquery mobile + ssm。
寫的差不多的時候,想到解決事務問題,本來以為非常簡單,只要在配置文件中加上相應的mybatis在spring中注解配置即可。
配置是這樣的。
<!-- (事務管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />
后來發現一直未生效,在調用mapper進行數據庫增刪查時,一直顯示:
org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a3157c4]
證明取得的SqlSession一直是無事務處理的,后來又試了在捕獲異常后,重新再拋出異常等方法,均不生效。
仔細考慮,應該還是配置文件的問題,
之前這段事務管理器的配置一直都是放在spring-mybatis.xml中的,再試了一下放在spring-servlet.xml中。重啟后,再試,居然生效了,顯示日志如下:
org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d344a12]
...
org.springframework.jdbc.datasource.DataSourceTransactionManager - Initiating transaction rollback
看來還是加載配置的順序問題,又得到一個經驗。
看來spring的配置是很大的學問。