一、注解的方式

1. 在Spring boot工程的主入口类中加入注解

// 开启事务支持
@EnableTransactionManagement
  • 1
  • 2

2. 在需要事务支持的服务类(class)或方法(method)上,加上注解并设置其属性

/*
* 表明该类(class)或方法(method)受事务控制
* @param propagation 设置隔离级别
* @param isolation 设置传播行为
* @param rollbackFor 设置需要回滚的异常类,默认为RuntimeException
*/
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、AOP的方式

  • 如图创建一个class,以切面的形式实现事务管理
// 切面
@Aspect
// 表示该类相当于Spring的xml配置文件中的<Beans>
@Configuration
public class TransactionAdviceConfig { /**
* 定义切点路径
*/
private static final String AOP_POINTCUT_EXPRESSION = "execution(* com.personal.test.Satsuki.service.*.*(..))"; @Autowired
private PlatformTransactionManager transactionManager; /**
* @description 事务管理配置
*/
@Bean
public TransactionInterceptor TxAdvice() {
// 事务管理规则,承载需要进行事务管理的方法名(模糊匹配)及设置的事务管理属性
NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource(); // 设置第一个事务管理的模式(适用于“增删改”)
RuleBasedTransactionAttribute transactionAttribute1 = new RuleBasedTransactionAttribute();
// 当抛出设置的对应异常后,进行事务回滚(此处设置为“Exception”级别)
transactionAttribute1.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
// 设置隔离级别(存在事务则加入其中,不存在则新建事务)
transactionAttribute1.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
// 设置传播行为(读已提交的数据)
transactionAttribute1.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); // 设置第二个事务管理的模式(适用于“查”)
RuleBasedTransactionAttribute transactionAttribute2 = new RuleBasedTransactionAttribute();
// 当抛出设置的对应异常后,进行事务回滚(此处设置为“Exception”级别)
transactionAttribute2.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
// 设置隔离级别(存在事务则挂起该事务,执行当前逻辑,结束后再恢复上下文事务)
transactionAttribute2.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
// 设置传播行为(读已提交的数据)
transactionAttribute2.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
// 设置事务是否“只读”(非必需,只是声明该事务中不会进行修改数据库的操作,可减轻由事务造成的数据库压力,属于性能优化的推荐配置)
transactionAttribute2.setReadOnly(true); // 建立一个map,用来储存要需要进行事务管理的方法名(模糊匹配)
Map<String, TransactionAttribute> txMap = new HashMap<>();
txMap.put("insert*", transactionAttribute1);
txMap.put("update*", transactionAttribute1);
txMap.put("delete*", transactionAttribute1);
txMap.put("query*", transactionAttribute2); // 注入设置好的map
source.setNameMap(txMap);
// 实例化事务拦截器
TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source);
return txAdvice;
} /**
* @description 利用AspectJExpressionPointcut设置切面
*/
@Bean
public Advisor txAdviceAdvisor() {
// 声明切点要切入的面
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
// 设置需要被拦截的路径
pointcut.setExpression(AOP_POINTCUT_EXPRESSION);
// 设置切面和配置好的事务管理
return new DefaultPointcutAdvisor(pointcut, TxAdvice());
}
}

转载 Spring boot中配置事务管理的更多相关文章

  1. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  2. Spring Boot 中的事务管理

    希望能在发生异常的时候被回退,这时候就可以使用事务让它实现回退,做法非常简单,我们只需要在test函数上添加@Transactional注解即可. 使用@Transactional注解来声明一个函数需 ...

  3. Spring Boot中的事务管理 隔离级别

    在声明事务时,只需要通过value属性指定配置的事务管理器名即可,例如:@Transactional(value="transactionManagerPrimary"). 除了指 ...

  4. Spring Boot中的事务是如何实现的

    本文首发于微信公众号[猿灯塔],转载引用请说明出处 今天呢!灯塔君跟大家讲: Spring Boot中的事务是如何实现的 1. 概述 一直在用SpringBoot中的@Transactional来做事 ...

  5. 在Spring Boot中配置web app

    文章目录 添加依赖 配置端口 配置Context Path 配置错误页面 在程序中停止Spring Boot 配置日志级别 注册Servlet 切换嵌套服务器 在Spring Boot中配置web a ...

  6. spring的annotation-driven配置事务管理器详解

    http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html ——————————————————————————————————————————————— ...

  7. Spring Boot2 系列教程(八)Spring Boot 中配置 Https

    https 现在已经越来越普及了,特别是做一些小程序或者公众号开发的时候,https 基本上都是刚需了. 不过一个 https 证书还是挺费钱的,个人开发者可以在各个云服务提供商那里申请一个免费的证书 ...

  8. spring boot中配置日志log和热部署

    Java的日志有很多 个人强烈不推荐log4j ,推荐log4j2和logback 在高并发,多线程的环境下log4j1 的性能和log4j2相比可以用junk来形容  对就是junk.log4j2的 ...

  9. spring、spring boot中配置多数据源

    在项目开发的过程中,有时我们有这样的需求,需要去调用别的系统中的数据,那么这个时候系统中就存在多个数据源了,那么我们如何来解决程序在运行的过程中到底是使用的那个数据源呢? 假设我们系统中存在2个数据源 ...

  10. Spring boot中配置HikariCP连接池

    # jdbc_config datasourcespring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasourc ...

随机推荐

  1. 【Treatment-Rec 论文阅读】Data-driven Automatic Treatment Regimen Development and Recommendation

    Data-driven Automatic Treatment Regimen Development and Recommendation Authors: Leilei Sun, Chuanren ...

  2. Android复习(二)应用资源——>菜单

    菜单资源定义可通过 MenuInflater 进行扩充的应用菜单,包括选项菜单.上下文菜单和子菜单. 有关使用菜单的指南,请参阅菜单开发者指南. 文件位置: res/menu/filename.xml ...

  3. Transformer的Pytorch实现【1】

    使用Pytorch手把手搭建一个Transformer网络结构并完成一个小型翻译任务. 首先,对Transformer结构进行拆解,Transformer由编码器和解码器(Encoder-Decode ...

  4. linux 基础(8)例行任务

    我们的 linux 系统,有时会自动进行线上更新,会定时升级locate用到的数据库.用户也会"在每天0点备份数据"或者"每天8点分析登录文件",管理这些例行任 ...

  5. 工作中的技术总结_ thymeleaf的应用 _select&input的数据回显 _20210910

    工作中的技术总结_ thymeleaf的应用 _select&input的数据回显 _20210910 在需要用户输入的场合,常常会有对用户填入数据的验证,对数据的验证不通过则需要返回到表单页 ...

  6. 初识GO语言--基本数据类型

  7. Python自带difflib模块

    官方文档:https://docs.python.org/3/library/difflib.html difflib模块的作用是比对文本之间的差异,且支持输出可读性比较强的HTML文档,与Linux ...

  8. 人工智能模型训练中的数据之美——探索TFRecord

    上一篇:<构建人工智能模型基础:TFDS和Keras的完美搭配> 序言:在人工智能模型的训练过程中,如何高效管理和处理大量数据是一个重要的课题.TensorFlow 的 TFRecord ...

  9. The 2024 ICPC Asia East Continent Online Contest (I) G

    Link: The Median of the Median of the Median 考虑二分答案,对中位数进行二分,每次去判断是否比中位数大即可. 我们钦定了一个中位数 \(x\),对于 \(\ ...

  10. Flink CDC 实时同步 MySQL

    Flink CDC 系列文章 Flink CDC 实时同步 MySQL Flink CDC 实时同步 Oracle 准备工作 MySQL 数据库(version: 5.7.25),注意,MySQL 数 ...