Spring事物管理——声明式事务管理(注解式)

注:内容来自《JavaWeb应用开发基础教程》,在此仅用来学习
Spring 支持编程式事务管理和声明式事务管理。

  1. 编程式事务管理:使用代码进行事务管理
  2. 声明式事务管理:使用注解或XML配置进行管理事物

注:实际开发中要尽可能使用声明式事务管理。尽管不如编程式事务管理灵活,但声明式事务管理允许通过代码控制事物

编程式事务管理

Spring提供了两种编程式事务管理:使用TransactionTemplate;直接使用一个PlatformTransactionManager实现。Spring建议使用第一种

声明式事务管理

1、使用XML配置声明式事物

2、使用注解配置声明式事物

UserServiceImpl实现类的addTwoUsers(final List<User> users)方法负责向数据库user表中插入两条记录,插入的两条记录作为一个事物进行,要么一起插入两条数据,要么一条也不会插入,说明使用注解配置Spring声明式事物,其关键代码如下:

@Component("userService")
    public class UserServiceImpl implements UserService{
        private UserDao userDao;
        @Autowired
        public UserServiceImpl(UserDao userDao){
            this.userDao = userDao;
        }
        //一次添加两个用户操作
        @Override
        @Transactional(propagation = Propagation.REQUIRED,readOnly = false)
        public void addTwoUsers(final List<User> users){
            add(users.get(0));
            add(user.get(1));
        }
        ....
    }
 @Transactional(propagation = Propagation.REQUIRED,readOnly = false) 

注解用于addTwoUsers()方法之前,表示对该方法实施SpringAOP事物增强。@Transactional也可以放于累迁,表示对类中所有的方法进行事物增强
@Transactiona注解只是提供元数据,本身并不能完成事物切面织入,因此还需要在Spring配置文件中进行配置

<!--	开启事物的注解支持-->
<tx:annotation-driven transaction-manager="transactionManager"/>

配置文件使用<tx:annotation-driven>元素开启Spring事物的注解支持,这样Spring会自动扫描所有使用@Transactional注解的Bean,为该Bean的所有方法或某个方法实施事物增强。

@Transactional(rollbackFor = Exception.class)属性

在使用@Transactional注解时,在发生异常时默认仅对RuntimeExceptionError发生回滚,如果是非运行异常(例如:SQLExceptionIOException等)将不会进行回滚。

运行异常和非运行异常关系

在这里插入图片描述

Exceptions与Errors的关系

Exceptions:

程序自身可以处理的异常,可以通过catch的方式捕捉,通常遇到异常时,对其进行处理,从而使程序正常运行(事物)。Exceptions又分为运行时异常(RuntimeException,又叫非受检查异常)和非运行时异常(又叫检查异常);

Errors

程序自身不能处理的异常,不能通过catch的方式捕捉。例如:系统崩溃、内存不足、堆栈溢出等。编辑器不会对这类错误进行检测,一旦错误发生,程序便被终止,仅靠程序自身,永远也不会恢复

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值