SpringBoot 开启事务Spring事务常用

简介: SpringBoot 开启事务Spring事务常用
 
//启动类上
@MapperScan(basePackages = "com.xx.mapper.*")
@SpringBootApplication
@EnableScheduling
@EnableTransactionManagement  //注解生效就加
public class SysWebApplication extends SpringBootServletInitializer
 
 
//常用的CRUD
------------------------- 添加修改删除 -----------------------------
@RequestMapping(value = "/save", method = RequestMethod.POST )
@Log("查看系统日志列表")
@Transactional(propagation = Propagation.REQUIRED)
public ResultBean save(){
        demoMapper.insert(new Demo(11L,"1"));
        demoMapper.insert(new Demo(12L,"1"));
        demoMapper.insert(new Demo(13L,"1"));
        return ResultBean.ok();
        }
 
        ------------------------- 查询 -----------------------------
@Transactional(propagation = Propagation.SUPPORTS)
@RequestMapping(value = "/list", method = RequestMethod.GET )
@Log("查看系统日志列表")
public ResultBean get(HttpServletRequest request, HttpServletResponse response) throws IOException {
 
        List all = demoService.seleDemo();
 
        try{
 
            return ResultBean.ok(all);
        }catch (Exception e){
        e.printStackTrace();
        }
 
        return null;
        }
        传播行为
 
        所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
        我们可以看 org.springframework.transaction.annotation.Propagation 枚举类中定义了6个表示传播行为的枚举值:
 
public enum Propagation {
    REQUIRED(0),
    SUPPORTS(1),
    MANDATORY(2),
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4),
    NEVER(5),
    NESTED(6);
}
 
REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
        SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
        MANDATORY :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
        REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。
        NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。
        NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。
        NESTED :如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。
 
        指定方法:通过使用 propagation 属性设置,例如:
 
@Transactional(propagation = Propagation.REQUIRED)


相关文章
|
6天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
35 8
|
8天前
|
SQL Java 关系型数据库
【SpringFramework】Spring事务
本文简述Spring中数据库及事务相关衍伸知识点。
36 9
|
15天前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
45 13
|
18天前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
1月前
|
缓存 安全 Java
Spring高手之路26——全方位掌握事务监听器
本文深入探讨了Spring事务监听器的设计与实现,包括通过TransactionSynchronization接口和@TransactionalEventListener注解实现事务监听器的方法,并通过实例详细展示了如何在事务生命周期的不同阶段执行自定义逻辑,提供了实际应用场景中的最佳实践。
51 2
Spring高手之路26——全方位掌握事务监听器
|
2月前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
277 12
|
2月前
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
111 10
|
1月前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
152 5
|
2月前
|
Java 开发者 Spring
Spring高手之路24——事务类型及传播行为实战指南
本篇文章深入探讨了Spring中的事务管理,特别是事务传播行为(如REQUIRES_NEW和NESTED)的应用与区别。通过详实的示例和优化的时序图,全面解析如何在实际项目中使用这些高级事务控制技巧,以提升开发者的Spring事务管理能力。
64 1
Spring高手之路24——事务类型及传播行为实战指南