广告
返回顶部
首页 > 资讯 > 后端开发 > Python >spring boot基于注解的声明式事务配置详解
  • 253
分享到

spring boot基于注解的声明式事务配置详解

2024-04-02 19:04:59 253人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

事务配置 1、配置方式一 1)开启spring事务管理,在Spring Boot启动类添加注解@EnableTransactionManagement(proxyTargetClas

事务配置

1、配置方式一

1)开启spring事务管理,在Spring Boot启动类添加注解@EnableTransactionManagement(proxyTargetClass = true);等同于xml配置方式的 <tx:annotation-driven />(注意:1项目中只需配置一次,2需要配置proxyTargetClass = true)

2)在项目中需要添加事务的类或方法上添加注解@Transactional(建议添加在方法上),一般使用默认属性即可,若要使用事务各属性可查看spring事务官方文档了解

2、配置方式二(指定事务,需要多个事务管理器时用)

1)开启事务管理:创建多个事务,如下例子


@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class TransactionConfig implements TransactionManagementConfigurer{
    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.druid.url}")
    private String url;
    @Value("${spring.datasource.druid.username}")
    private String username;
    @Value("${spring.datasource.druid.passWord}")
    private String password;
    @Bean
    public DataSource dataSourceDb() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
    
    @Bean
    public PlatfORMTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSourceDb());
    }
    // 创建事务管理器2
    @Bean(name = "txManager2")
    public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
        return new JpaTransactionManager(factory);
    }
    
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return transactionManager();
    }
}

到这里已经成功整合好事务配置了,你只需要在使用的地方添加注解@Transactional即可,如果需要限定事务管理器,可使用@Transactional(“txManager2”)

spring boot事务(注解模式)

使用注解模式不需要配置文件,也不需要配置事务配置类或者方法,只需要使用“@Transcation”注解引入到相对应的位置即可实现事务回滚功能。

1.引入pom.xml


  <!-- 事物 -->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
     </dependency>

2.在controller里面使用事务注解

因为service和接口层都是直接操作数据库的方法,一般需要多个操作或者循环的Controller才需要事务支持,如果是mybatis批量操作数据库语句也不需要事务

事务作用域一般常见的分成两种:

①定义在类上面 :所有的方法都支持事务

②定义在方法上 :只有该方法支持事务


package com.Transaction.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.WEB.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.Transaction.entity.Alarmtype;
import com.Transaction.mapper.AlarmtypeMapper;
import com.Transaction.service.AlarmtypeService;
@Controller
//@Transactional //事务级别,如果该类中同时操作多个方法,只要失败则全部回滚
public class AlarmtypeController {
 @Autowired
 AlarmtypeMapper alarmtypeMapper;
 
 @Autowired
 AlarmtypeService alarmtypeService;
 
 @RequestMapping("index")
 public synchronized String index(){
  //List<Alarmtype> list = alarmtypeMapper.getAlarmtypeList();
  List<Alarmtype> list = alarmtypeService.findAll();
  for (int i = 0; i < list.size(); i++) {
   System.out.println(list.get(i).getId()+"--"+list.get(i).getAlarmname());
  }
  return "index";
 }
 
 //批量插入
 @RequestMapping("addBatch")
 @ResponseBody
 @Transactional//对整个方法进行事务处理,方法体内只要有一个方法没执行成功则全部回滚
 public synchronized int addBatch(){
  Alarmtype alarmtype = new Alarmtype();
  Alarmtype updatealarmtype = new Alarmtype();
  updatealarmtype.setId(1);
  updatealarmtype.setAlarmname("修改前轮故障");
  alarmtypeMapper.updateAlarmtypeById(updatealarmtype);
  int result = 0;
  try {
   for (int i = 0; i < 5; i++) {
    if(i==2){
     //alarmname在数据库中长度不超过50,赋值超过50报异常 Data too long
     alarmtype.setAlarmname("测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试");
     alarmtype.setAlarmtypeid(i);
    }else{
     alarmtype.setAlarmname("测试"+i);
     alarmtype.setAlarmtypeid(i);
    }
    result = alarmtypeMapper.addAlarmtype(alarmtype);
   }
  }catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 
 @RequestMapping("test")
 @ResponseBody
 public synchronized String test(){  
  return "test";
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: spring boot基于注解的声明式事务配置详解

本文链接: https://www.lsjlt.com/news/132126.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • spring boot基于注解的声明式事务配置详解
    事务配置 1、配置方式一 1)开启spring事务管理,在spring boot启动类添加注解@EnableTransactionManagement(proxyTargetClas...
    99+
    2022-11-12
  • spring boot基于注解声明式事务配置的示例分析
    小编给大家分享一下spring boot基于注解声明式事务配置的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!事务配置1、配置方式一1)开启spring事务管理,在spring boot启动类添加注解@Enable...
    99+
    2023-06-20
  • Spring声明式事务配置使用详解
    目录序章准备工作创建jdbc.properties配置Spring的配置文件声明式事务概念代码讲解配置 Spring 的配置文件创建表创建组件测试无事务情况加入事务序章 Spring...
    99+
    2022-11-13
  • Java Spring 声明式事务详解
    目录项目结构: 表结构: 基于xml的声明式事务配置完全注解(零xml)方式配置事务参数no-rollback-forrollback-forread-onlytimeoutisol...
    99+
    2022-11-12
  • 关于Spring中声明式事务的使用详解
    目录一、前言 二、回顾JDBC的数据库事务 三、数据库事务隔离级别 3.1 数据库事务的基本特征3.2 详解数据库隔离级别 3.2.1 未提交读 3.2.2 读提交 3.2.3 可重...
    99+
    2022-11-12
  • Spring声明式事务注解之@EnableTransactionManagement解析
    Spring声明式事务注解之@EnableTransactionManagement 1. 说明 @EnableTransactionManagement声明在主配置类上,表示开启声...
    99+
    2022-11-12
  • Spring基于注解配置事务的属性
    本文实例为大家分享了Spring基于注解配置事务的属性,供大家参考,具体内容如下 一、事务属性概述 在Spring中,事务属性描述了事务策略如何应用到方法上,事务属性包含5个方面: ...
    99+
    2022-11-13
  • spring注解如何开启声明式事务
    目录spring开启声明式事务导入依赖配置类文件业务逻辑编写测试代码总结spring开启声明式事务 导入依赖 pom.xml <dependencies>        ...
    99+
    2022-12-28
    spring 注解 注解开启声明式事务 spring声明式事务
  • Spring声明式事务注解的源码分析
    本文小编为大家详细介绍“Spring声明式事务注解的源码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring声明式事务注解的源码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、@EnableTr...
    99+
    2023-07-02
  • 基于Spring Boot的Logback日志轮转配置详解
    在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的。我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异。这里就结合Spring Boot配置一下Logback的日志。默认最简单的配置默认...
    99+
    2023-05-31
    springboot logback 日志
  • Spring基于注解的缓存声明深入探究
    目录一、概述二、声明式基于注解的缓存1、@Cacheable注解(1) 默认缓存key的生成(2) 声明式自定义key生成(3) 默认缓存解析(4) 自定义缓存解析(5) 条件式缓存...
    99+
    2022-11-13
    Spring注解的缓存 Spring声明式缓存
  • SpringBoot 注解事务声明式事务的方式
     springboot 对新人来说可能上手比springmvc要快,但是对于各位从springmvc转战到springboot的话,有些地方还需要适应下,尤其是xml配置。我个人是比较喜欢注解➕xml是因为看着方便,查找方便,...
    99+
    2023-05-31
    spring boot 注解
  • Spring声明式事务注解之@EnableTransactionManagement有什么用
    这篇文章给大家分享的是有关Spring声明式事务注解之@EnableTransactionManagement有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring声明式事务注解之@EnableTra...
    99+
    2023-06-20
  • Spring深入刨析声明式事务注解的源码
    目录1、@EnableTransactionManagement2、加载事务控制组件2.1、AutoProxyRegistrar2.2、ProxyTransactionManagem...
    99+
    2022-11-13
  • 详解基于Spring Boot与Spring Data JPA的多数据源配置
    由于项目需要,最近研究了一下基于spring Boot与Spring Data JPA的多数据源配置问题。以下是传统的单数据源配置代码。这里使用的是Spring的Annotation在代码内部直接配置的方式,没有使用任何XML文件。@Con...
    99+
    2023-05-31
    spring boot 多数据源
  • spring基于注解配置实现事务控制操作
    目录spring注解配置实现事务控制1、导入相关依赖2、创建spring配置类3、创建JdbcConfig数据源配置类4、创建TransactionConfig事务配置类5、创建jd...
    99+
    2022-11-12
  • Spring事务Transaction配置的五种注入方式详解
    前段时间对spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。总结如下:Spring配置文件中关于事务...
    99+
    2023-05-31
    spring 注入 ct
  • Java Spring之基于注解的AOP怎么配置
    本篇内容主要讲解“Java Spring之基于注解的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之基于注解的AOP怎么配置”吧!1 环境搭建1.1 第一步:...
    99+
    2023-07-05
  • 完美解决Spring声明式事务不回滚的问题
    疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回滚。于是就对相关代码进行了一番测试,结果发现一下踩进了两个坑,确实...
    99+
    2023-05-31
    spring 声明式事务 不回滚
  • Spring boot配置绑定和配置属性校验的方式详解
    目录配置绑定先建立数据配置文件application.yml@ConfigurationProperties@Value第一种 @Value(“${}”)第二...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作