一、注解的方式

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. MySQL故障诊断常用方法手册(含脚本、案例)

    当你在使用MySQL数据库时,突然遇到故障,你是否会感到迷茫? ● 数据库响应变慢.SQL慢.数据库插入出现延时-- ● 表不见了.日志出现多个断连记录-- ● 非法断电造成MySQL启动报错.同步复 ...

  2. Vnode 是什么 ,什么是虚拟DOM ?

    Vnode 是 JavaScript 对象,就是把标签结构的信息描述成js对象 : Vnode 的作用:通过 render 函数 将 template 描述成 Vnode ,然后通过一系列操作转换真实 ...

  3. 00 通过 Pytorch 实现 Transformer 框架完整代码

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  4. 用于 Wi-Fi 密码破解

    wpa-dictionary 用于 Wi-Fi 密码破解. Linux 篇(推荐) 1. 安装 aircrack-ng 使用相应包管理工具安装,例如 Debian/Ubuntu 使用 apt 安装: ...

  5. Python入门:A+B问题

    1. A + B 问题I 前言 本篇作为课程第一篇,主要是对Python基础语法进行扫盲,本节课会学习到下面知识: 输入 本道题目的工作任务很简单,只是计算两个数的和,但是在计算之前,我们首先要明确的 ...

  6. KubeSphere 社区双周报 | FluentBit 新增 tcp 输入插件 | 2023.09.29-10.12

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  7. 云原生爱好者周刊:使用 AWS 开源的 FireCracker 来创建和管理 K8s 集群

    开源项目推荐 KubeFire 这个项目比较有创意,它使用 AWS 开源的轻量级虚拟化项目 FireCracker 来创建和管理 Kubernetes 集群,摒弃了传统的 qcow2 和 vhd 等虚 ...

  8. Nuxt.js 应用中的 nitro:build:before 事件钩子详解

    title: Nuxt.js 应用中的 nitro:build:before 事件钩子详解 date: 2024/11/4 updated: 2024/11/4 author: cmdragon ex ...

  9. 利用 Screen 保持 VSCode 连接远程任务持续运行

    在 Linux 上使用 screen 是一种保持进程持续运行的便捷方式,即使用户断开 SSH 连接,进程也不会中断. 我在使用VSCode连接AutoDL时,不知道如何能够使进程保持运行,后查阅资料可 ...

  10. 读书笔记-C#8.0本质论-07

    19. 平台互相操作性和不安全代码 19.1 在托管平台调用非托管代码--P/Invoke模式 CLI通过P/Invoke功能对非托管DLL所导出的函数执行API调用.和类的所有普通方法一样,必须在类 ...