配置方法
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.