spring事务处理详解
2015-08-25 18:02
537 查看
1:Java包含两种异常:checked异常和unchecked异常。
checked和unchecked异常之间的区别是:Checked异常必须被显式地捕获try-catch-finally,而unchecked异常则可以不必捕获或抛出。
Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。
2:Mysql 存储引擎中InnoDB与Myisam的主要区别
事务处理方面:innodb 支持事务功能,myisam 不支持。Myisam 的执行速度更快,性能更好。
engine = innodb 和 engine = myisam
可使用下述语句之一检查表的表类型:
SHOW TABLE STATUS LIKE ‘tbl_name’;
SHOW CREATE TABLE tbl_name;
使用下述语句,可检查mysqld服务器支持的存储引擎:
SHOW ENGINES;
3:spring事务处理
throw new RuntimeException(“xxxxxxxxxxxx”); 默认事务回滚throw new Exception(“xxxxxxxxxxxx”); 默认事务不回滚
Spring的AOP即声明式事务管理默认是针对unchecked exception回滚。也就是默认对RuntimeException()异常或是其子类进行事务回滚;
checked异常,throw new Exception默认不会回滚
若想让checked异常或者自定义异常回滚
(1)配置文件方式
[code]<tx:advice id="txAdvice"> <tx:attributes> <tx:method name="update*" no-rollback-for="IOException"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" rollback-for="com.cn.untils.exception.MyException"/> </tx:attributes> </tx:advice>
(2)注解方式
[code]@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = MyException.class)
不起作用:
[code]@Transactional public void addAdmin(Admin admin) throws Exception { try { this.adminDao.add(admin); admin.setUsername("123456789012345"); this.adminDao.update(admin); } catch (Exception e) { e.printStackTrace(); throw new Exception("测试!"); } }
起作用
[code]@Transactional(rollbackFor = Exception.class) public void addAdmin(Admin admin) throws Exception { try { this.adminDao.add(admin); admin.setUsername("123456789012345"); this.adminDao.update(admin); } catch (Exception e) { e.printStackTrace(); throw new Exception("测试!"); } }
起作用
[code]@Transactional public void addAdmin(Admin admin) { try { this.adminDao.add(admin); admin.setUsername("123456789012345"); this.adminDao.update(admin); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("测试!"); } }
完整写法:
[code]@Transactional(rollbackFor = RuntimeException.class) public void addAdmin(Admin admin) { try { this.adminDao.add(admin); admin.setUsername("123456789012345"); this.adminDao.update(admin); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("测试!"); }
———————————————————————————————————————
我开通了微信订阅号“i小窝”,关注即可第一时间看到我的原创文章以及我推荐的精彩文章:
相关文章推荐
- 如何设置jdk缓存
- SpringAnnotation注解之@Autowired
- SpringAnnotation注解之@Resource
- java中String 字符串中类的使用
- githup创建新java项目
- SpringAnnotation注解之@Component,@Repository,@Service,@Controller
- SpringAnnotation注解之@PreDestroy,@PostConstruct,@Scope
- SpringXML方式给bean初始化属性值
- SpringXML方式配置bean的生存范围Scope
- SpringXML方式配置bean的集合注入:list,map,properties
- myeclipse快捷键
- Java中重载与复写的区别、super与this的比较
- SpringXML方式配置bean的自动装配autowire
- SpringXML方式配置bean的生命周期lifecycle
- SpringXML方式配置bean的懒加载lazy-init
- ProGuard代码混淆及Spring框架时找不到利用注解获取的bean 在ant文件中加入:
- SysLog简介和java操作实例
- java-猜数字游戏
- springMVC对异常处理的支持
- Java并发编程:volatile关键字解析(牛人还是很多的,尤其是看了诸多文档的)