配置方法
1. spring xml配置及使用
spring的xml文件中加入如下內容:
<!-- 配置事務管理 -->
<bean id="tm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 聲明 使用註解式事務,對標註@Transactional的方法或類進行事務管理 -->
<tx:annotation-driven transaction-manager="tm"/>
2. 使用
配置完成後,在需要進行事務管理的Service類或方法上,加上@Transactional註解即可。
@Transactional的更多用法見百度。
3. 配置項說明
其中,"<bean id=“tm” …>" 聲明一個事務管理器,並指定事物管理類,聲明事務管理器時,需要指定數據源,這裏的dataSource是項目使用的druid數據源,裏面指定了jdbc類和數據庫ip、賬號密碼等。
不同的持久層框架用不同的類,我用的是ibatis.
事物管理類與持久層框架的對應關係:
事物管理類 | 持久層框架 |
---|---|
org.springframework.jdbc.datasource.DataSourceTransactionManager | iBatis/Spring Jdbc/Mybatis |
org.springframework.orm.hibernate3.HibernateTransactionManager | Hibernate |
org.springframework.orm.jpa.JpaTransactionManager | Jpa |
org.springframework.jdo.JdoTransactionManager | Jdo |
org.springframework.transaction.jta.JtaTransactionManager | Jta |
“<tx:annotation-driven transaction-manager=“tm”/>” 聲明瞭啓用註解方式將添加@Transactional註解的對象納入事務管理。transaction-manager的值是事務管理器的id.
注意事項
- @Transaction加在方法上時,必須加在public方法上,否則不起作用。
- 在一個需要事務的Service裏面,調用另一個service方法,則被調用的方法也需要加上事務註解。
- 不能把“導致出現rollback的異常”cache掉,應該在方法聲明處向上層拋出。因爲spring在動態代理時,在發生異常時,在cache塊裏面進行rollback. 如果需要cache,則需要在cache塊裏面顯示的的rollback.