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

标签:springboot,事务,TransactionTemplate
0
投稿

猜你喜欢

  • Linux中Java开发常用软件安装方法总结

    2022-03-11 16:21:03
  • Spring JPA配置文件Eclipse报错如何解决

    2022-05-07 00:51:34
  • SpringBoot上传临时文件被删除引起报错的解决

    2022-05-28 23:46:24
  • java实现简单年龄计算器

    2022-01-28 02:23:34
  • Opencv光流运动物体追踪详解

    2023-06-21 11:55:31
  • Springboot实现Shiro整合JWT的示例代码

    2022-01-30 02:58:32
  • Java线程池Executor用法详解

    2022-02-13 01:21:16
  • 关于Java中修饰符的总结(fina除外)

    2023-11-22 23:15:57
  • Jackson 反序列化时实现大小写不敏感设置

    2021-11-18 06:17:18
  • Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)

    2022-05-11 20:00:58
  • C#使用Lambda表达式简化代码的示例详解

    2022-09-16 03:03:36
  • monkeyrunner之电脑安装驱动(5)

    2022-02-28 19:17:00
  • SpringBoot使用注解进行分页的实现示例

    2021-08-21 22:45:32
  • C#利用QrCode.Net生成二维码(Qr码)的方法

    2023-11-30 17:37:38
  • Java自动生成趋势比对数据的方法分享

    2023-11-25 18:29:18
  • Spring中IOC和AOP的深入讲解

    2023-11-19 10:20:59
  • 将文件夹下所有文件输出到日志文件中 c#递归算法学习示例

    2023-04-08 20:36:22
  • java实现银行ATM管理系统

    2023-10-30 14:50:51
  • Flutter 如何正确显示SnackBar

    2023-06-23 13:00:40
  • C#委托用法详解

    2023-06-04 22:46:43
  • asp之家 软件编程 m.aspxhome.com