springboot编程式事务TransactionTemplate的使用说明
作者:yzh_1346983557 发布时间:2022-03-01 15:19:37
TransactionTemplate的使用
总结:在类中注入TransactionTemplate,即可在springboot中使用编程式事务。
spring支持编程式事务管理和声明式事务管理两种方式。
编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。对于声明式事务管理,springboot中推荐使用@Transactional注解。
1.为何用?
多数情况下,方法上声明@Transactional注解声明事务即可,简单、快捷、方便,但@Transactional声明式事务的可控性太弱了,只可在方法或类上声明,做不到细粒度的事务控制。
如果一个方法前10条sql都是select查询语句,只有最后2条sql是update语句,那么只对最后2条sql做事务即可。
2.如何用
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
springboot中引入mybatis-spring-boot-starter依赖包即可。
mybatis-spring-boot-starter依赖包中包含了spring-boot-starter-jdbc的依赖,spring-boot-starter-jdbc中包含DataSourceTransactionManager事务管理器以及自动注入配置类DataSourceTransactionManagerAutoConfiguration。
代码中使用,在使用bean中注入TransactionTemplate即可:
@Service
public class TestServiceImpl {
@Resource
private TransactionTemplate transactionTemplate;
public Object testTransaction() {
//数据库查询
dao.select(1);
return transactionTemplate.execute(status -> {
//数据库新增
dao.insert(2);
dao.insert(3);
return new Object();
});
}
}
TransactionTemplate简单使用
/**
* 事务模板
* @author zz
*
*/
public class TransactionTemplateSupport {
@Autowired
private PlatformTransactionManager transactionManager;
private TransactionTemplate requiredTransactionTemplate;
protected TransactionTemplate getRequiresNewTransactionTemplate(){
if (requiredTransactionTemplate == null){
requiredTransactionTemplate = new TransactionTemplate(transactionManager);
requiredTransactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED);
//requiredTransactionTemplate.setReadOnly(true);
//requiredTransactionTemplate.setTimeout(30000);
}
return requiredTransactionTemplate;
}
}
@Service
public class TestTransaction extends TransactionTemplateSupport {
@Autowired
private JdbcTemplate jdbcTemplate ;
@Autowired
private TransactionTemplate transactionTemplate;
// @Transactional
public void test(){
jdbcTemplate.execute("insert into user value (1,'aaa','aaa','aaa')");
int i = 1/0;
jdbcTemplate.execute("insert into user value (2,'aaa','aaa','aaa')");
}
public void test2(){
getRequiresNewTransactionTemplate()
// transactionTemplate
.execute(new TransactionCallback<Void>() {
@Override
public Void doInTransaction(TransactionStatus status) {
jdbcTemplate.execute("insert into user value (11,'BBBB','aaa','aaa')");
int i = 1/0;
jdbcTemplate.execute("insert into user value (21,'aaa','NNNN','aaa')");
return null;
}
});
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://blog.csdn.net/yzh_1346983557/article/details/118492783
猜你喜欢
- 一.static关键字的用途在《Java编程思想》P86页有这样一段话:“static方法就是没有this的方法。在st
- SpringBoot找不到映射文件org.apache.ibatis.binding.BindingException: Invalid b
- 1安装eclipse插件步骤,点击help,选择Eclipse Marketplace2.输入Scala,点击go3.选择搜索到的Scala
- 在开发中,我们通常需要将从数据库中查询的集合数据转换成类似文件系统一样的树形集合,比如:省市单位,部门机构,书籍分类等TreeNode对象@
- 上一节我们完成了使用DataGrid显示所有商品信息,这节我们开始添加几个功能:添加、更新、删除和查询。首先我们实现下前台的显示,然后再做后
- Elastic Search是一个开源的,分布式,实时搜索和分析引擎。Spring Boot为Elasticsearch及Spring Da
- springmvc的图片上传1.导入相应的pom依赖 <dependency> <groupId>co
- 一. 流的常用创建方法1-1 使用Collection下的 stream() 和 parallelStream() 方 * ist<St
- 引言: 最近公司在做一个教育培训学习及在线考试的项目,本人主要从事网络课程模块,主要做课程分类,课程,课件的创建及
- java实体类转成map1.第一种 <!-- 配置gson -->  
- 23种设计模式第十四篇:java迭代器模式定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图:如
- 1、简单又有效的方法是使用PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX(如:s
- Handler是什么?Handler 是一个可以实现多线程间切换的类,通过 Handler 可以轻松地将一个任务切换到 Handler 所在
- 一.理论准备KMP算法为什么比传统的字符串匹配算法快?KMP算法是通过分析模式串,预先计算每个位置发生不匹配的时候,可以省去重新匹配的的字符
- 一、前言(吐槽+煽情+简介) &n
- 前言这几天学习谷粒商城又再次的回顾了一次SpringCache,之前在学习谷粒学院的时候其实已经学习了一次了!!!这里就对自己学过来的内容进
- Thread生命周期生命周期概述Java的线程状态描述放在Thread类里面的枚举类State中.总共包含了6中状态(从出生到死亡)。pub
- 简介有时候会需要在c#特别是WPF环境下调用其他的程序,这类型的程序以命令行为执行环境,这里就说明下如何调用exe并传递参数一般有两种方法一
- 一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想
- 协议做如下规定:规定数据协议:序列号 长度 状态字 数据长度 数据1 &n