SSM学习6:Spring事务

news2024/9/21 22:37:55

简介

  • 事务作用:在数据层保障一系列的数据库操作同成功同失败
  • Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
public interface PlatformTransactionManager{
	void commit(TransactionStatus status) throws TransactionStatus ;
	void rollback(TransactionStatus status) throws TransactionStatus ;
}

基本流程
1、配置当前接口方法具有事务

public interface AccountService {
    /**
     * 转账操作
     * @param out 传出方
     * @param in 转入方
     * @param money 金额
     */
    //配置当前接口方法具有事务
    @Transactional
    public void transfer(String out,String in ,Double money) ;
}

2、配置事务管理器,mybatis使用的是jdbc事务
JdbcConfig.java

public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }

    //配置事务管理器,mybatis使用的是jdbc事务
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

}

3、开启注解式事务驱动
SpringConfig.java

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
//开启注解式事务驱动
@EnableTransactionManagement
public class SpringConfig {
}

注意:

  • Spring注解式事务通常添加在业务层接口中,而不会添加在业务层接口实现类中,降低耦合
  • 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务

相关配置

在这里插入图片描述
基本格式

public interface AccountService {
    /**
     * 转账操作
     * @param out 传出方
     * @param in 转入方
     * @param money 金额
     */
    //配置当前接口方法具有事务
    @Transactional(readOnly = true,timeout = -1)
    public void transfer(String out,String in ,Double money) ;
}

回滚

  • 自动回滚,当方法抛出运行时异常(RuntimeException)及其子类或者错误(Error)
  • 显式回滚,对于那些不是运行时异常的受检异常(即 Exception 类型但不属于 RuntimeException 的异常),Spring不会自动回滚事务。然而,你可以在 @Transactional 注解中使用 rollbackFor 属性来指定哪些具体的异常类型应该触发事务回滚。
public interface AccountService {
    /**
     * 转账操作
     * @param out 传出方
     * @param in 转入方
     * @param money 金额
     */
    //配置当前接口方法具有事务
    @Transactional(rollbackFor = {IOException.class,FileNotFoundException.class})
    public void transfer(String out,String in ,Double money) ;
}

设置事务传播行为
在这里插入图片描述

public interface AccountService {
    @Transactional
    public void transfer(String out,String in ,Double money) throws IOException;
}
public interface LogService {
    //propagation设置事务属性:传播行为设置为当前操作需要新事务
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    void log(String out, String in, Double money);
}
@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    @Autowired
    private LogService logService;

    public void transfer(String out, String in, Double money) {
        try {
            accountDao.outMoney(out, money);
            int i = 1 / 0;
            accountDao.inMoney(in, money);
        } finally {
            logService.log(out, in, money);
        }
    }

}

通过设置propagation属性,让某一个操作创建新的事务,保证不会被其他事务的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++第五弹 -- 类与对象(中下) (赋值运算符重载函数 const成员函数 取地址操作符重载函数)

目录 前言一. 赋值运算符重载1. 运算符重载2. 赋值运算符的重载3. 前置 和 后置 重载 二. 日期类的实现三. const成员函数四. 取地址及const取地址操作符重载总结 前言 本文将深入探讨C中的运算符重载,重点讲解赋值运算符、前置/后置运算符、取地址运算符的重载方法…

2024 ACT汽车软件与安全技术周 | 龙智携全方位汽车软件开发解决方案亮相,助力应对汽车软件开发功能安全、合规等挑战

2024年7月18-19日(周四-周五),2024第三届ACT汽车软件与安全技术周将在上海佘山翰悦阁酒店举办。 龙智即将携汽车开发及管理解决方案创新亮相,并在汽车信息安全技术峰会主会场上发表主题演讲,分享推动汽车软件开发与功…

RAG实践:ES混合搜索BM25+kNN(cosine)

1 缘起 最近在研究与应用混合搜索, 存储介质为ES,ES作为大佬牌数据库, 非常友好地支持关键词检索和向量检索, 当然,支持混合检索(关键词检索向量检索), 是提升LLM响应质量RAG(Retri…

【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式

日期:2024年7月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

Portainer工具

Portainer是一款免费、开源的Docker的图形化管理工具,其能够提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和…

ST Smart Things Sentinel:一款针对复杂IoT协议的威胁检测工具

关于ST Smart Things Sentinel ST Smart Things Sentinel,简称ST,是一款功能强大的安全工具,广大研究人员可以使用该工具检测物联网 (IoT) 设备使用的复杂协议中的安全威胁。 在不断发展的联网设备领域,ST Smart Things Sentinel…

揭秘反向沙箱:企业网络安全的终极防线

通常,我们讨论的沙箱环境分为正向沙箱和反向沙箱。那么什么正向沙盒反向沙盒到底是什么呢? 正向沙箱通常用于分析来自外部的未知文件、电子邮件附件、网页内容等,以检测其中是否包含恶意软件或有害代码。这种沙箱通常位于企业的防火墙之外&am…

鸿蒙next 下拉刷新上来加载 来了 我不允许你不会

前言 各位同学大家好, 有段时间没有给大家更新文章了 ,最近在开发 鸿蒙next中 有用到这个下拉刷新和上来加载的功能就准备写个文章分享一下 那么废话不多说 我们正式开始: 效果图 准备工作: 找到我们DevEco studio 的安装位置 找到我们ohpm 的bin目录 配置在环境变了中 …

Plotly.js带颜色比例的轮廓图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Plotly.js Contour Plot with Color Scale 应用场景 Contour plot 是一种可视化数据分布的图表,常用于气象学、地球物理学和医学成像等领域。它通过绘制等值线来展示数据的变化,帮助用…

Flink异常:org/apache/hadoop/hive/ql/parse/SemanticException

在flink项目中跑 上面这段代码出现如下这个异常&#xff0c; java.lang.NoClassDefFoundError: org/apache/thrift/TException 加上下面这个依赖后不报错 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId…

水库大坝安全监测险情应对措施

汛期暴雨洪涝灾害发生后&#xff0c;为保证大坝及下游人民生命财产安全&#xff0c;应及时进行大坝安全现场检查和快速评估。评估内容包括大坝沉降和水平变形、裂缝、坝坡是否塌滑、下游坡是否存在集中渗漏或大面积渗水、溢洪道启闭设备能否正常运行、近坝库岸是否有大的滑坡体…

[激光原理与应用-110]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 13 - 德擎激光焊接在线缺陷检测系统 WDD详解解析

目录 一、产品简介 1.1 概述 1.2 多光学信号传感器 &#xff08;1&#xff09;外观 &#xff08;2&#xff09;消费电子行业应用 1.3 IO信号处理模块/可编程控制模块 1.4 操作系统分析软件 1.5 检测原理分析 二、硬件原理 2.1 系统架构与电路接口 2.2 多光学信号传感…

链路聚合概述

技术背景&#xff1a; 随着网络规模不断扩大&#xff0c;人们对骨干链路的带宽吞吐量与可靠性提出了越来越高的要求。根据传统的方案&#xff0c;只能将当前链路更换为更高速的链路。但是更换链路需要付出较高的成本费用&#xff0c;而且灵活性差&#xff0c;因此我们需要探索…

ERROR: No matching distribution found for matplotlib

1.问题&#xff1a;安装matplotlib报错&#xff0c;如下图所示&#xff1a; 2.通过换源&#xff0c;输入以下命令&#xff1a;python -m pip install matplotlib -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com&#xff0c;但是还是无效 3.在pycharm中升级…

OpenHarmony 入门——ArkUI自定义组件的基础语法(一)

文章大纲 引言一、自定义组件的基本语法1、Component 装饰器 和 Entry 装饰器2、build函数3、Reuseable4、定义成员函数/变量 二、自定义组件的使用 引言 在OpenHarmony 系统里ArkUI子系统显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义…

本地服务器部署外网可访问地址

一、开放服务器端口 &#xff08;1&#xff09;打开【控制面板】-【系统和安全】-【防火墙】-【高级设置】 &#xff08;2&#xff09;右键【新建规则】-【端口】-【程序&#xff1a;所有程序】-【操作&#xff1a;允许连接】-【配置文件&#xff1a;默认】-【名称&#xff1a;…

Customize-A-Video:文生视频自由定制

视频领域&#xff0c;尤其是文本到视频&#xff08;T2V&#xff09;扩散模型中的动作定制&#xff0c;尚未得到充分研究。来自马里兰大学、Adobe Research 和延世大学的研究团队提出了一种名为“Customize-A-Video”的新方法&#xff0c;本方法通过单一参考视频对动作进行建模&…

20240713 每日AI必读资讯

&#x1f697; 烧钱抢老司机饭碗&#xff1f;“萝卜快跑”事件辟谣 - 武汉相关负责人辟谣&#xff1a;无人车不是1000辆&#xff0c;只有400多辆 - “萝卜快跑”自动驾驶车可以通过单车智能、多重安全系统冗余保障以及5G云代驾平行驾驶三重冗余保障&#xff0c;确保自动驾驶…

vue学习day07-scoped样式冲突、data是一个函数、props详解、组件通信、非父子通信-event bus 事件总线

19、scoped样式冲突 &#xff08;1&#xff09;默认情况&#xff1a;写在组件中的样式会全局生效&#xff0c;因此会很容易造成多个组件之间的样式冲突问题。 1&#xff09;全局样式&#xff1a;默认组件中的样式会作用到全局 比如&#xff1a; 当只有box1设置边框时&#…

外贸国际短信群发工具的开发源代码!

在外贸行业中&#xff0c;快速、准确地与客户进行沟通是业务成功的关键之一&#xff0c;随着科技的不断进步&#xff0c;国际短信群发工具成为了外贸从业者不可或缺的工具。 本文将通过科普五段源代码&#xff0c;带您深入了解外贸国际短信群发工具的开发原理和实现过程。 一…