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);}
}
相关文章:
SpringBoot之统一事务管理配置
SpringBoot之自定义Jackson反序列化日期类型转换配置类 文章目录 SpringBoot之自定义Jackson反序列化日期类型转换配置类1. SpringBoot版本2. 统一事务管理配置类3. 主启动类加入开启事务的注解 统一事务管理配置 1. SpringBoot版本 <parent><groupId>org.springfr…...
荒岛生存:以牙签为核心资源的生存策略与思考
设想一下,当你不幸流落荒岛,随身携带的唯一物品是一盒牙签,面对极端环境与匮乏资源,如何运用这一看似微不足道的工具进行生存,成为了一项严峻的挑战。本文旨在探讨如何最大限度地发挥牙签在荒岛生存中的作用࿰…...

云计算 2月26号 (进程管理和常用命令)
一、权限扩展 文件权限管理之: 隐藏权限防止root误删除 文件属性添加与查看 [rootlinux-server ~]# touch file1 file2 file3 1.查看文件属性 [rootlinux-server ~]# lsattr file1 file2 file3 ---------------- file1 ---------------- file2 ---------------- f…...
Pytorch中,dim形象化的确切意义是什么?
在Pytorch中涉及张量的操作都会涉及“dim”的设置,虽然也理解个大差不差,但是偶尔还是有点犯迷糊,究其原因还是没有形象化的理解。 首先,张量的维度排序是有固定顺序的,0,1,2,.....…...

跨域引起的两个接口的session_id不是同一个
来源场景: RequestMapping(“/captcha”)接口设置了SESSION_KEY,也能获取到,但是到了PostMapping(“/login”)接口就是空的,由于跨域导致的两个session_id不是同一个 /*** 系统用户 前端控制器*/ Controller CrossOrigin(origins…...

解释一下前端框架中的虚拟DOM(virtual DOM)和实际DOM(real DOM)之间的关系。
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
【MyBatis-Plus】之queryWrapper.apply用法
目录 一、queryWrapper.apply的含义及其用法 二、其他方法 三、注意事项 官网地址:MyBatis-Plus https://baomidou.com/ 一、queryWrapper.apply的含义及其用法 QueryWrapper.apply() 是 MyBatis-Plus 提供的方法,用于构建动态 SQL 查询条件。它允许…...

Centos中安装Docker及Docker的使用
在centos7系统中安装指定版本的docker,并通过docker使用安装mysql为例,阐述docker的使用。 2.1、Docker卸载及安装yum依赖 【卸载Docker,如果安装的Docker的版本不合适】 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-…...

亿道推出重磅加固平板!为行业发展注入新动力
随着科技生产力的不断发展,各行各业都得到质的飞跃。产品的迭代速度也大大加快,作为全球领先的加固行移动终端一站式提供商,亿道信息跟紧时代潮流,推出EM-I10J、EM-I20J两款均衡型加固平板,为行业发展注入新动力。 接地…...

Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)
Gemma-SFT Gemma-SFT(谷歌, Google), gemma-2b/gemma-7b微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/gemma-sft全部weights要用fp32/tf32, 使用fp16微调十几或几十的步数后大概率lossnan;(即便layer-norm是fp32也不行, LLaMA就没有这个问题, …...

MySQL:数据库中有哪些锁
1、全局锁 加上全局锁后整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞: 对数据的增删改操作,比如 insert、delete、update等语句;对表结构的更改操作,比如 alter table、drop table 等…...

MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实
2月26日,在MWC 2024世界移动通信大会上,美格智能正式宣布推出5G-A模组SRM817WE以及全新的5G-A FWA解决方案,包含5G-A CPE解决方案SRT858M、5G-A MiFi解决方案SRT878H和5G-A ODU解决方案SRT853MX,旨在进一步提升网络性能࿰…...

Opencv双目校正函数 stereoRectify 详解
目录 函数的[官方解释](https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga617b1685d4059c6040827800e72ad2b6)函数原型参数说明:输入参数:输出参数: 函数代码测试 函数的官方解释 函数原型 void cv::stereoRectify ( InputArr…...

实现前端开发几个常用技巧
如何知道iframe下载完成 定时器轮询监听readyState的状态,如果是 complete 或者 interactive 说明文件加载完成。 常用的全屏居中 JS 函数 JS实现deepCopy 生成星级评分 JS数组扁平化之简单方法实现 toString 优点:简单,方便,对…...

Vue3 在SCSS中使用v-bind
template 先创建一个通用的页面结构 <template><div class"v-bubble-bg"></div> </template>js 在JS中先对需要用的数据进行定义: 可以是参数,也可以是data <script setup>const props defineProps({bgCol…...

玩转地下管网三维建模:MagicPipe3D系统
地下管网是保障城市运行的基础设施和“生命线”。随着实景三维中国建设的推进,构建地下管网三维模型与地上融合的数字孪生场景,对于提升智慧城市管理至关重要!针对现有三维管线建模数据差异大、建模交互弱、模型效果差、缺乏语义信息等缺陷&a…...

11.以太网交换机工作原理
目录 一、以太网协议二、以太网交换机原理三、交换机常见问题思考四、同网段数据通信全过程五、跨网段数据通信全过程六、关键知识七、调试命令 前言:在网络中传输数据时需要遵循一些标准,以太网协议定义了数据帧在以太网上的传输标准,了解以…...

【通信基础知识】完整通信系统的流程图及各模块功能详解
2024.2.29 抱歉最近在写毕设大论文,因此没有太多时间更新。然而,在写论文的过程中,发现自己对通信系统的了解还不够全明白,因此差了一些硕博论文总结了一个完整的通信系统流程图。若有不对的地方请多多指正//部分内容有参考ChatGP…...

k8s-项目测试环境部署
部署规划 概述 项目开发好后,我们需要部署,我们接下来就基于 阿里云云效 阿里云容器镜像服务 k8s 搭建部署环境 阿里云云效 : 放代码,可以做cicd(https://www.aliyun.com/product/yunxiao) 阿里云容器镜像服务 :…...
【Elasticsearch管理】缓存机制
文章目录 缓存Field data cache(字段数据缓存)Node query cache(节点查询缓存)Indexing buffer(索引缓冲区)Shard request cache(分片请求缓存)缓存失败启用/禁用缓存根据请求启用/禁…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...