基于注解的方式
1.配置事务管理器
<bean id="transaction"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
2.启用事务注解
<tx:annotation-driven transaction-manager="transaction"/>
@Transactionl
3.事务的传播行为
在@Transactionl
添加propagation属性来指定事务的传播行为,共有七种指定方式
1. REQUIRED:默认值,在被调用的事务方法中运行。
2. REQUIRES_NEW:使用自己的事务,调用的事务方法的事务被挂起。
4.事务隔离级别
在@Transactionl
添加isolation属性来指定事务的隔离级别
5.其他属性
* noRollbackFor
指定事务对哪些异常不回滚,默认所有异常都回滚
* readOnly
指定事务是否为只读,表示这个事物只读取数据但不更新数据,这样可以帮助数据库引擎进行优化
* timeOut
指定事务强制回滚之前最多可占用的时间,单位秒
基于xml的方式
- 配置事务管理器
- 配置事务属性
- 配置事务切点,关联事务属性
最后,记录一下我踩过的一些坑
1. 当抛出的是Exception时事务没有回滚,而抛出RunTimeException就会回滚。详见http://blog.sina.com.cn/s/blog_6ac4c6cb01018pbl.html
2. tomcat一直起来不来,因为我是这样写的
private ApplicationContext ctx;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
{
ctx = new ClassPathXmlApplicationContext("spring-config.xml");
namedParameterJdbcTemplate = ctx.getBean(NamedParameterJdbcTemplate.class);
}
去网上找了下原因是因为这个时候ApplicationContext还没初始化,然后改成这样就ok了
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;