spring 注解式事务配置方法及注意事项

配置方法

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