SpringBoot集成Mybatis使用切面对所有Service的事务统一管理

SpringBoot集成Mybatis使用切面对所有Service的事务统一管理

package cn.com.baidu.aspect;import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.interceptor.*;
import javax.sql.DataSource;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;/*** CBC* 2023年12月2日00:53:35* 用于对数据源事务配置的初始化*/
@Configuration
public class MyBatisTransaction {@Autowiredprivate DataSource dataSource;/*** 获取事务管理器-修改信息* @return*/@Bean("myBatisTransactionManager")public DataSourceTransactionManager myBatisTransactionManager() {return new DataSourceTransactionManager(dataSource);}/*** 事务拦截器(设置以哪些开头的需要事务)*/@Bean("myBatisTransactionAdvice")public TransactionInterceptor myBatisTransactionAdvice(DataSourceTransactionManager txManager) {NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();/* 只读事务,不做更新操作*/RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute();readOnlyTx.setReadOnly(true);/*不支持事务,当前存在事务时,将挂起事务,运行方法*/readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);/*写事务,需要更新操作 */RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute(TransactionDefinition.PROPAGATION_REQUIRED, Collections.singletonList(new RollbackRuleAttribute(Exception.class)));requiredTx.setTimeout(5);Map<String, TransactionAttribute> txMap = new HashMap<>();txMap.put("save*", requiredTx);txMap.put("add*", requiredTx);txMap.put("update*", requiredTx);txMap.put("delete*", requiredTx);txMap.put("remove*", requiredTx);txMap.put("get*", readOnlyTx);txMap.put("list*", readOnlyTx);txMap.put("query*", readOnlyTx);source.setNameMap(txMap);return new TransactionInterceptor(txManager, source);}/*** 切面拦截规则 参数会自动从容器中注入*/@Beanpublic DefaultPointcutAdvisor defaultPointcutAdvisor(TransactionInterceptor myBatisTransactionAdvice) {DefaultPointcutAdvisor pointcutAdvisor = new DefaultPointcutAdvisor();pointcutAdvisor.setAdvice(myBatisTransactionAdvice);AspectJExpressionPointcut pointCut = new AspectJExpressionPointcut();pointCut.setExpression("execution(* cn.com.baidu.service.*.*.*(..))");pointcutAdvisor.setPointcut(pointCut);return pointcutAdvisor;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高德地图海量点

1.先建个js文件 import AMapLoader from "amap/amap-jsapi-loader"; const initMap async (config) > { return new Promise((resolve, reject) > { AMapLoader.load({ key: "0650fbe85c708dc3388fe803d0e5d861", // key: config.key, version: &…

【Redis】Redis高并发高可用(集群方案)

Redis集群 Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。之前,Redis分布式方案一般有两种: 1、客户端分区方案,优点是分区逻辑可控,缺…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&am…

力扣18题 四数之和 双指针算法

18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff…

java+springboot停车场小区车库租赁预订系统ssm+jsp

该平台为客户和业主提供等信息服务平台的运营方&#xff0c;管理方&#xff0c;如何通过车库平台建立实现优化管理的方法提供参考。能够实现在一个相对广阔的地域内&#xff08;例如一座城市)的多个停车场的随意停车。管理平台会统一调度车位资源&#xff0c;自动进行交易结算。…

密码学概论之基本概念

本人信息安全专业&#xff0c;大三&#xff0c;为着将来考研做准备&#xff0c;打算按照自己目前的理解给大家唠唠密码学。 这个专栏我将从以下七个章节来聊聊密码学&#xff0c;若有不当之处&#xff0c;敬请指出。 • 密码学概论 • 流密码 • 分组密码 • 公钥密码 •…

Hdoop学习笔记(HDP)-Part.13 安装Ranger

十三、安装Ranger 1.安装服务 (1)Choose Services (2)Assign Masters (3)Assign Slaves and Clients 选择不安装Ranger Tagsync (4)Customize Services 设置RANGER ADMIN DB FLAVOR&#xff1a;选择MySQL&#xff0c;依据ambari使用的数据库来定 Ranger DB name&#xff…

16、什么是损失函数

上一节介绍了训练的过程,一个模型在训练的过程中,每一轮训练数据计算到到最后一层时,都会输出本轮的预测值,那么如何将本轮的预测值与标签中的真实值进行对比呢? 这就要用到损失函数(Loss function)。 什么是损失函数 损失函数是用来衡量模型预测结果与真实标签(grou…

简化控制台日志的输出内容

我们在运行或测试项目的时候&#xff0c;控制台会输出大量与SpringBoot启动和测试相关&#xff0c;以及与Mybatis-Plus启动相关的输出日志。这些输出日志会占用大量的篇幅&#xff0c;不利于我们查看项目的运行日志和测试结果。 简化控制台输出日志&#xff1a; 1. 在resources…

ansible模块

目录 一、ansible的command模块 1.ad-hoc 2.playbook 3.command模块 二、ansible的shell模块 1.shell模块帮助 2.shell模块支持的参数和解释 3.简单试验 4.批量远程执行脚本 三、script模块 1.script模块帮助 2.shell模块支持的参数和解释 3.实践 四、ansible文件…

c#利用Forms.Timer定时检测Tcp连接状态

目的&#xff1a;本地创建客户端连接服务器端&#xff0c;如果连接正常显示连接正常如果连接异常显示连接异常。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.T…

Spring AOP 代码案例

目录 AOP组成 通知的具体方法类型 引入Spring AOP依赖 定义AOP层 UserController Postman测试 AOP工作流程 AOP组成 切面 : 切⾯&#xff08;Aspect&#xff09;由切点&#xff08;Pointcut&#xff09;和通知&#xff08;Advice&#xff09;组成&#xff0c;它既包含了…

搭建nfs文件目录共享

搭建nfs文件目录共享 一、简介 NFS&#xff0c;英文全称是Network File System&#xff0c;中文全称是网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源&#xff0c;在NFS应用中&#xff0c;本地NFS的客…

如何选择 Facebook 代理?

Facebook上从事业务推广、广告或资料推广以及群组的用户需要高质量且可靠的代理。使用代理&#xff0c;用户可以在账号被封锁的情况下访问自己的资料&#xff0c;同时与多人进行即时通信&#xff0c;并能够&#xff1a; 自动发送邀请参加各种活动&#xff1b; 通过特殊的机器人…

2022年高校大数据挑战赛A题工业机械设备故障预测求解全过程论文及程序

2022年高校大数据挑战赛 A题 工业机械设备故障预测 原题再现&#xff1a; 制造业是国民经济的主体&#xff0c;近十年来&#xff0c;嫦娥探月、祝融探火、北斗组网&#xff0c;一大批重大标志性创新成果引领中国制造业不断攀上新高度。作为制造业的核心&#xff0c;机械设备在…

经典神经网络——VGGNet模型论文详解及代码复现

论文地址&#xff1a;1409.1556.pdf。 (arxiv.org)&#xff1b;1409.1556.pdf (arxiv.org) 项目地址&#xff1a;Kaggle Code 一、背景 ImageNet Large Scale Visual Recognition Challenge 是李飞飞等人于2010年创办的图像识别挑战赛&#xff0c;自2010起连续举办8年&#xf…

C/C++ 内存管理(1)

文章目录 C/C 内存划分静态和动态内存C语言的动态内存分配函数mallocfreecallocrealloc 常见内存使用错误 C/C 内存划分 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结 束时这些存储…

【数据结构】初识排序 直接插入排序

初识排序 & 直接插入排序 &#x1f41f;排序在现实中的应用&#x1f41f;排序的概念&#x1f41f;常见的排序算法&#x1f41f;直接插入排序&#x1f4a6;举例--直接插入排序在现实种的应用&#x1f4a6;单趟直接插入排序讲解&#x1f4a6;直接插入排序算法 &#x1f41f;排…

【android开发-11】android中创建自定义布局并引入自定义布局的参考例子

1&#xff0c;以下是在Android中创建自定义布局并引入自定义布局的参考例子&#xff1a; 首先&#xff0c;创建一个自定义布局文件。在项目的res/layout目录下创建一个新的XML文件&#xff0c;例如custom_layout.xml。在该文件中&#xff0c;您可以定义自定义的视图元素和布局…

应用于智慧零售的AI边缘计算盒子+AI算法软硬一体化方案

中国是世界上最大的消费市场&#xff0c;零售行业拥有极大的发展潜力&#xff0c;阿里、腾讯两大互联网巨头正在加紧、加大布局&#xff1b; 信迈智慧零售方案可涵盖快消行业、服饰行业、餐饮行业、酒店行业、美家行业、消费电子行业、新零售商行业、服饰连锁、大卖场/商超、百…