首页 > 其他分享 >【转载】Springboot2.x 事务

【转载】Springboot2.x 事务

时间:2023-12-16 17:45:00浏览次数:26  
标签:事务 Resource Transactional springframework Springboot2 org import 转载

参考

环境

环境 版本 操作
windows 10
vs code 1.84.2
Spring Boot Extension Pack v0.2.1 vscode插件
Extension Pack for Java v0.25.15 vscode插件
JDK 11
Springboot 2.3.12.RELEASE
mybatis-spring-boot-starter 2.1.4 mvn依赖
Apache Maven 3.8.6

正文

注解式

内容转载自其他文章,并非从官方文档中查询得知,仅供参考。

  • @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。因此可以在 Service 层和 Controller 层使用。
  • 虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
  • SpringBoot1.x需要在启动类上添加 @EnableTransactionManagement ,SpringBoot2.x则不需要。
  • 在单元测试的时候,测试方法添加 @Transactional 注解后会自动回滚。

此处暂时不理解,仅作记录。

// 指定回滚
@Transactional(rollbackFor=Exception.class) 

// 指定不会滚
@Transactional(noRollbackFor=Exception.class)

// 有事务加入、没有事务则新建
@Transactional(propagation=Propagation.REQUIRED) 

// 容器不为这个方法开启事务
@Transactional(propagation=Propagation.NOT_SUPPORTED)

// 只读,不能更新删除
@Transactional (propagation = Propagation.REQUIRED,readOnly=true) 

// 超时时间
@Transactional (propagation = Propagation.REQUIRED,timeout=30)

// 数据库隔离级别
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)
  • 在测试中使用
package com.xiaqiuchu.demo.service;

import static org.junit.jupiter.api.Assertions.assertNotEquals;

import javax.annotation.Resource;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;


@SpringBootTest
public class StudentServiceTest {

    @Resource
    StudentService studentService;
    
    @Test
    // 在测试中,开启事务会自动回滚(不在测试中的时候捕获到受查异常时,会自动回滚。)
    @Transactional
    void testUpdateNameById() {
        Integer updateNum = studentService.updateNameById(1L, "王小黑");
        assertNotEquals(updateNum, 0);
    }
}

手动事务(代码)

package com.xiaqiuchu.demo.service;

import java.util.ArrayList;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;

import com.xiaqiuchu.demo.entity.Student;
import com.xiaqiuchu.demo.mapper.StudentMapper;

@Service
public class StudentService {
    @Resource
    StudentMapper studentMaper;

    @Resource
    private PlatformTransactionManager platformTransactionManager;

    @Resource
    private TransactionDefinition transactionDefinition;

    public Integer updateNameById(Long id, String name){
        // 开启事务
        TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);

        Integer updateNum = studentMaper.updateNameById(id, name);

        // 提交
        platformTransactionManager.commit(transactionStatus); 
        // 回滚(这里应该放到异常处理块里面,当前仅演示)
        // platformTransactionManager.rollback(transactionStatus); 

        return updateNum;

    }
    
}



标签:事务,Resource,Transactional,springframework,Springboot2,org,import,转载
From: https://www.cnblogs.com/xiaqiuchu/p/17905096.html

相关文章

  • 【转载】liuhangshin NOIp2023假赛记
    day-?CSP2023,我用eps秒就拿到了395pts,少的5pts是不想让自己太骄傲。day0去⑧中试机,由于机房的Vscode不好用,我现场写了114个插件安装上去,现在勉强能够做到编译代码的时间比我写10k代码的时间短。旁边cool_milo一直在问我的ip是多少,怎么有人这么菜啊!NOIp这种级别的比赛还需要......
  • 一文带你掌握Spring事务核心:TransactionDefinition详解!
    TransactionDefinition是Spring框架中用于定义事务属性的核心接口。在Spring的事务管理中,这个接口扮演着至关重要的角色,它允许开发者定制事务的各种属性,如隔离级别、传播行为、超时时间以及是否只读。基本介绍TransactionDefinition接口的主要方法:getIsolationLevel():返......
  • 关于自己平台事务回滚而第三方平台不能回滚的处理问题
    有这么一个场景,我们平台创建了一个活动,需要发布,发布的时候需要去调用第三方的活动增加接口,才能把我们的活动信息保存到第三方那边,但是在调用活动增加接口之前还需要创建一个活动组接口,也是调用第三方的活动组创建接口,正常流程是第一步活动组创建接口,第二步将活动组id封装到活动信......
  • 嵌入式linux下web服务器搭建(转载)
    一、移植编译生成boa二进制文件Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。首先下载......
  • JavaWeb - Day08 - MySQL - 多表查询、事务、索引 - Mybatis - 入门
    01.MySQL-多表查询-概述数据准备#建议:创建新的数据库createdatabasedb04;usedb04;--部门表createtabletb_dept(idintunsignedprimarykeyauto_incrementcomment'主键ID',namevarchar(10)notnulluniquecomment'部门名称',......
  • 如何让@Transactional注解方法被无注解的方法调用时使事务生效
    Java-如何让@Transactional注解方法被无注解的方法调用时使事务生效问题在springboot项目中,同一个类中,无@Transaction注解的方法调用另一个有@Transaction注解的方法,该如何让事务生效?‍解法importorg.springframework.beans.factory.annotation.Autowired;importorg.spr......
  • 如何让@Transactional注解方法被无注解的方法调用时使事务生效
    Java-如何让@Transactional注解方法被无注解的方法调用时使事务生效问题在springboot项目中,同一个类中,无@Transaction注解的方法调用另一个有@Transaction注解的方法,该如何让事务生效?‍解法importorg.springframework.beans.factory.annotation.Autowired;importorg.spr......
  • Chat2DB接入文心一言AI教程(原创教程,转载请注明)
    引言关于Chat2DB和文心一言是啥我就不赘述了,由于Chat2DB自带的ai有调用次数限制,所以想着接入百度的文心AI,但是由于网上没有找到相关的教程,此方法是本人研究了一段时间才弄出来的,顺便记录一下备忘,也希望对有同样需求有所帮助!一、注册并实名认证百度智能云账号百度智能云地址:点击......
  • SpringCloud Seata【解决分布式事务的问题】安装
    SpringCloudSeata【解决分布式事务的问题】安装1.问题引出1.1单机单库(多表)处理事务示意图1.2分布式微服务架构下的数据库事务示意图图片梳理:用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:仓库服务:对给定商品扣除商品数量订单服务:根据采购需求创建订单......
  • 【转载】Springboot2.x单元测试
    参考https://blog.csdn.net/wangxi06/article/details/114630426https://blog.csdn.net/qq_44381387/article/details/120869168(新版spring-boot-starter-test不再集成junit,而是junit-jupiter,无需@RunWith)https://www.jianshu.com/p/34f57f41af70https://www.cnblogs.co......