当前位置: 首页 > news >正文

SpringBoot之统一事务管理配置

SpringBoot之自定义Jackson反序列化日期类型转换配置类

文章目录

  • SpringBoot之自定义Jackson反序列化日期类型转换配置类
  • 1. SpringBoot版本
  • 2. 统一事务管理配置类
  • 3. 主启动类加入开启事务的注解

统一事务管理配置

1. SpringBoot版本

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version></parent>
<dependencies><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency></dependencies>

2. 统一事务管理配置类

package com.yuan.webframework.config;import org.aspectj.lang.annotation.Aspect;
import org.springframework.aop.Advisor;
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.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
import org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource;
import org.springframework.transaction.interceptor.TransactionInterceptor;/*** <p>* Description: 统一事务管理配置* </p>** @author jinshengyuan* @since 2022/8/5 16:35*/
@Aspect
@Configuration
public class TransactionManagerConfig {//切点表达式private static final String AOP_POINT_EXPRESSION = "execution(* com.zx.*.**.service.impl.*.*(..))  or execution(* org.snaker.engine..*.*(..))";@AutowiredPlatformTransactionManager transactionManager;//注入平台(Mybatis)事务管理器@Beanpublic TransactionInterceptor txAdvice(){//增删改DefaultTransactionAttribute txRequired = new DefaultTransactionAttribute();txRequired.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);txRequired.rollbackOn(new Throwable());txRequired.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);//除了指定前缀开头的以外,其他方法也支持事务DefaultTransactionAttribute txRequiredAll = new DefaultTransactionAttribute();txRequiredAll.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);txRequiredAll.rollbackOn(new Throwable());txRequiredAll.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);//查DefaultTransactionAttribute txRequiredReadOnly = new DefaultTransactionAttribute();txRequiredReadOnly.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);txRequiredReadOnly.setReadOnly(true);NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();//切入点切入以下的方法为事务方法source.addTransactionalMethod("add*",txRequired);source.addTransactionalMethod("save*",txRequired);source.addTransactionalMethod("insert*",txRequired);source.addTransactionalMethod("update*",txRequired);source.addTransactionalMethod("modify*",txRequired);source.addTransactionalMethod("delete*",txRequired);source.addTransactionalMethod("change*",txRequired);source.addTransactionalMethod("move*",txRequired);source.addTransactionalMethod("remove*",txRequired);source.addTransactionalMethod("submit*",txRequired);source.addTransactionalMethod("distribute*",txRequired);source.addTransactionalMethod("cancel*",txRequired);source.addTransactionalMethod("batch*",txRequired);source.addTransactionalMethod("sync*",txRequired);source.addTransactionalMethod("set*",txRequired);source.addTransactionalMethod("*",txRequiredAll);//切入点切入的以下的方法为只读事务方法source.addTransactionalMethod("get*",txRequiredReadOnly);source.addTransactionalMethod("query*",txRequiredReadOnly);source.addTransactionalMethod("select*",txRequiredReadOnly);source.addTransactionalMethod("count*",txRequiredReadOnly);source.addTransactionalMethod("find*",txRequiredReadOnly);source.addTransactionalMethod("search*",txRequiredReadOnly);source.addTransactionalMethod("is*",txRequiredReadOnly);return  new TransactionInterceptor(transactionManager,source);}//事务切入点@Beanpublic Advisor txAdviceAdvisor(){AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();pointcut.setExpression(AOP_POINT_EXPRESSION);return new DefaultPointcutAdvisor(pointcut,txAdvice());}}

3. 主启动类加入开启事务的注解

如主启动类中加入@EnableTransactionManagement注解,如下

package com.yuan;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;@Slf4j
@EnableTransactionManagement
@SpringBootApplication
public class MyApplication {public static void main(String[] args) throws UnknownHostException {SpringApplication.run(MyApplication.class, args);}
}
http://www.lryc.cn/news/308556.html

相关文章:

  • 荒岛生存:以牙签为核心资源的生存策略与思考
  • 云计算 2月26号 (进程管理和常用命令)
  • Pytorch中,dim形象化的确切意义是什么?
  • 跨域引起的两个接口的session_id不是同一个
  • 解释一下前端框架中的虚拟DOM(virtual DOM)和实际DOM(real DOM)之间的关系。
  • 【MyBatis-Plus】之queryWrapper.apply用法
  • Centos中安装Docker及Docker的使用
  • 亿道推出重磅加固平板!为行业发展注入新动力
  • Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)
  • MySQL:数据库中有哪些锁
  • MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实
  • Opencv双目校正函数 stereoRectify 详解
  • 实现前端开发几个常用技巧
  • Vue3 在SCSS中使用v-bind
  • 玩转地下管网三维建模:MagicPipe3D系统
  • 11.以太网交换机工作原理
  • 【通信基础知识】完整通信系统的流程图及各模块功能详解
  • k8s-项目测试环境部署
  • 【Elasticsearch管理】缓存机制
  • JS api基础初学
  • uniapp实战:父子组件传参之子组件数量动态变化
  • Ubuntu绑定USB接口到固定端口
  • 解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题
  • 数字后端——DEF文件格式
  • 【可做课设、附完整技术文档】流式、异步、实时的Django聊天室!(需进一步定制可联系本人)
  • 网络编程:基于TCP和UDP的服务器、客户端
  • kubectl 命令行管理K8S(上)
  • Redis 之四:Redis 事务和乐观锁
  • C# WPF编程-创建项目
  • 密码学及其应用(应用篇15)——0/1背包问题