赞
踩
通过Service 层方法上添加 Spring 的 @Transactional
注解来完成
参 数 名 称 | 功 能 描 述 |
---|---|
readOnly | 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true) |
rollbackFor | 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class}) |
rollbackForClassName | 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”}) |
noRollbackFor | 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class}) |
noRollbackForClassName | 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:指定单一异常类名称:@Transactional(noRollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”}) |
propagation | 该属性用于设置事务的传播行为。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true) |
isolation | 该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置 |
timeout | 该属性用于设置事务的超时秒数,默认值为-1表示永不超时 |
实现事务三种方式(AOP + xml、AOP + @Aspect、@Transactional)
- @Resource
- private TransactionTemplate transactionTemplate;
-
- public void test(){
- Object result = transactionTemplate.execute(e->{
- // 对应代码
-
- return result;
- });
- }
1、TransactionTemplate的三个主要方法
1> afterPropertiesSet
2> execute 任务执行(报错直接调rollbackOnException )
3> rollbackOnException 回滚方法
2、TransactionTemplate的成员变量:
transactionManager,对应PlatformTransactionManager事务控制器
——execute和rollbackOnException方法里的具体事务控制都是调用里PlatformTransactionManager里的接口方法
3、execute(...)执行事务管理的时候调用 参数TransactionCallback<T>中dolnTransaction方法,通过匿名内部类的方式在doInTransaction里重写需要进行事务控制的业务代码即可
4、TransactionTemplate .
execute(...)执行事务管理的时候,传入的参数有两种选择:
1.TransactionCallback
2.TransactionCallbackWithoutResult
前者有返回值,后者无返回值
TransactionTemplate编程式事务-CSDN博客
- @Resource()
- PlatformTransactionManager transactionManager;
-
- public int insert(Product product,ProdutExt ext){
-
- TransactionStatus ts = transactionManager.getTransaction(new DefaultTransactionDefinition());
- try {
-
- //TODO 数据库操作
- transactionManager.commit(ts);
- }catch(Exception e){
-
- //异常时回滚
- transactionManager.rollback(ts);
- throw e;
- }
- }
1、PlatformTransactionManager用于整个事务的创建、开启、提交、回滚操作;事务的定义由TransactionDefinition定义事务的隔离级别;TransactionStatus用于对新创建的事务进行管理。
2、PlatformTransactionManager的三个方法
- public interface PlatformTransactionManager extends TransactionManager {
-
-
- //1.创建一个事务并开启事务
- TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
- throws TransactionException;
-
- //2.提交事务
- void commit(TransactionStatus status) throws TransactionException;
-
- //3.回滚事务
- void rollback(TransactionStatus status) throws TransactionException;
-
- }
3、PlatformTransactionManager中一些对象
TransactionDefinition
: 事务的一些基础信息,如超时时间、隔离级别、传播属性等TransactionStatus
: 事务的一些状态信息,如是否是一个新的事务、是否已被标记为回滚Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。