注解是Spring框架里很常用的,本博文对Annotation的事务管理进行说明,目的是为编程学习者提供参考的博客。
@Transactional放在一个类前面时,只是对public类型的方法有用
若类中某些方法不需要事务管理时,通过@Transaction(propagation = Propagation.Not_SUPPORTED)注释说明事务管理对这个方法不适应
~~~
@Transactional
public class TestServiceBean implements TestService {
private TestDao dao;
public void setDao(TestDao dao) {
this.dao = dao;
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public List<Object> getAll() {
return null;
}
}
~~~
**事物传播行为介绍:**
@Transactional(propagation=Propagation.REQUIRED)
如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
容器不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW)
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY)
必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.NEVER)
必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS)
如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
事物超时设置:
@Transactional(timeout=30) //默认是30秒
**@Transactional注解中常用参数说明**
<table border="1" cellspacing="0" cellpadding="0" style="width:100%"><tbody><tr><td width="21%"><p><span style="font-size:14px">参 数 名 称</span></p></td><td width="78%"><p><span style="font-size:14px">功 能 描 述</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">readOnly</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">rollbackFor</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:</span></p><p><span style="font-size:14px">指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)</span></p><p><span style="font-size:14px">指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})</span></p></td></tr></tbody></table>
续表)
<table border="1" cellspacing="0" cellpadding="0" style="width:100%"><tbody><tr><td width="21%"><p><span style="font-size:14px">参 数 名 称</span></p></td><td width="78%"><p><span style="font-size:14px">功 能 描 述</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">rollbackForClassName</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:</span></p><p><span style="font-size:14px">指定单一异常类名称:@Transactional(rollbackForClassName="RuntimeException")</span></p><p><span style="font-size:14px">指定多个异常类名称:@Transactional(rollbackForClassName={"RuntimeException","Exception"})</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">noRollbackFor</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:</span></p><p><span style="font-size:14px">指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)</span></p><p><span style="font-size:14px">指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">noRollbackForClassName</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:</span></p><p><span style="font-size:14px">指定单一异常类名称:@Transactional(noRollbackForClassName="RuntimeException")</span></p><p><span style="font-size:14px">指定多个异常类名称:</span></p><p><span style="font-size:14px">@Transactional(noRollbackForClassName={"RuntimeException","Exception"})</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">propagation</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置事务的传播行为,具体取值可参考表6-7。</span></p><p><span style="font-size:14px">例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">isolation</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">timeout</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">该属性用于设置事务的超时秒数,默认值为-1表示永不超时</span></p></td></tr></tbody></table>