spring事务处理详解

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)配置文件方式

<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)注解方式

@Transactional(rollbackFor = Exception.class)
 @Transactional(rollbackFor = MyException.class)

不起作用:

@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("测试!");
    }

}

起作用

@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("测试!");
    }

}

起作用

@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("测试!");
    }

}

完整写法:

@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小窝”,关注即可第一时间看到我的原创文章以及我推荐的精彩文章:
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十五楼亮哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值