iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >spring boot基于注解声明式事务配置的示例分析
  • 569
分享到

spring boot基于注解声明式事务配置的示例分析

2023-06-20 20:06:04 569人浏览 安东尼
摘要

小编给大家分享一下Spring Boot基于注解声明式事务配置的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!事务配置1、配置方式一1)开启spring事务管理,在spring boot启动类添加注解@Enable

小编给大家分享一下Spring Boot基于注解声明式事务配置的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

事务配置

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"; }}

看完了这篇文章,相信你对“spring boot基于注解声明式事务配置的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: spring boot基于注解声明式事务配置的示例分析

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

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

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

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

下载Word文档
猜你喜欢
  • spring boot基于注解声明式事务配置的示例分析
    小编给大家分享一下spring boot基于注解声明式事务配置的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!事务配置1、配置方式一1)开启spring事务管理,在spring boot启动类添加注解@Enable...
    99+
    2023-06-20
  • spring boot基于注解的声明式事务配置详解
    事务配置 1、配置方式一 1)开启spring事务管理,在spring boot启动类添加注解@EnableTransactionManagement(proxyTargetClas...
    99+
    2022-11-12
  • Spring声明式事务注解的源码分析
    本文小编为大家详细介绍“Spring声明式事务注解的源码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring声明式事务注解的源码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、@EnableTr...
    99+
    2023-07-02
  • Spring Boot配置方式的示例分析
    这篇文章给大家分享的是有关Spring Boot配置方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配...
    99+
    2023-05-30
    spring boot
  • Spring深入刨析声明式事务注解的源码
    目录1、@EnableTransactionManagement2、加载事务控制组件2.1、AutoProxyRegistrar2.2、ProxyTransactionManagem...
    99+
    2022-11-13
  • Spring基于注解配置事务的属性
    本文实例为大家分享了Spring基于注解配置事务的属性,供大家参考,具体内容如下 一、事务属性概述 在Spring中,事务属性描述了事务策略如何应用到方法上,事务属性包含5个方面: ...
    99+
    2022-11-13
  • Spring注解@Value及属性加载配置文件方式的示例分析
    这篇文章主要介绍了Spring注解@Value及属性加载配置文件方式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Spring中使用@Value注解给bean加载属...
    99+
    2023-06-20
  • Spring源码解析之编程式事务的示例分析
    这篇文章主要为大家展示了“Spring源码解析之编程式事务的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring源码解析之编程式事务的示例分析”这篇文章吧。一、前言在Spring中...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作