多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
注解是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>