服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Spring使用注解方式处理事务

Spring使用注解方式处理事务

2022-08-26 18:53少年啊! Java教程

这篇文章主要为大家详细介绍了Spring使用注解方式处理事务,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Spring有专门的类来处理事务,在这之前我们先要理解Spring处理事务中的几个概念:

1.接口:

事务管理器是PlatformTransactionManager接口,在接口中定义了事务的主要函数:commit(); 事务提交
rollback();事务回滚

2.事务管理器接口的实现类:

1)DataSourcTransactionManager:使用jdb或者mybatis访问数据库时使用的
<bean id=”myDataSource” class=“xx包.DataSourceTransactionManager”>
必须指定数据源
</bean>
2)HibernateTransactionManager:使用Hibernate框架时,使用的实现类
3)事务超时:TIMEOUT,秒为单位,默认是-1,使用数据库的默认超时时间
超时:指事务的最长执行时间,也就是一个函数最长的执行时间.当时间到了,函数没有
执行完毕,Spring会回滚该函数的执行(回滚事务)

3.事务的传播行为:事务在函数之间传递,函数怎么使用事务。通过传播行为指定函数怎么使用事务

有7个传播行为:
事务的传播行为常量都是以PROPAGATION_开头,形如:PROPAGATION_XXX
PROPAGATION_REQUIRED 指定的函数必须在事务内执行。若当前存在事务,就加入到当前事务中, 若当前没事务,就创建一个新事务。Spring默认的事务传播行为
PROPAGATION_REQUIES_NEW 总是新建一个新事务,若当前存在事务,就将当前事务挂起来,直 到新事务执行完毕
PROPAGATION_SUPPORTS 指定的函数支持当前事务,但若当前没事务,也可以使用非事务方式执 行
PROPAGATION_MANDATORY
PROPAGATION_NESTED
PROPAGATION_NEVER
PROPAGATION_NOT_SUPPORTED

我们了解了Spring处理事务的一些概念以及一些常用的类,那么现在在Spring中使用事务

项目目录:

Spring使用注解方式处理事务

要spring使用事务的注解就需要在application-config.xml(Spring核心配置文件)添加头部信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/tx
 http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
 
<!--声明事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="myDataSource"/>
</bean>
<!--声明事务的注解驱动
  transaction-manager:事务管理器对象的id
-->
<tx:annotation-driven transaction-manager="transactionManager"/>

BuyGoodsServiceImpl文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**使用注解来设值事务的属性(传播行为,隔离等级,超时,当哪些异常发生的时候触发回滚事务)
 * 注意:该注解必须使用在公有函数上,而且抛出的异常必需继承RuntimeException
 * */
@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,timeout = 20,
rollbackFor = {NullPointerException.class,NotEnoughException.class})
public void buyGoods(int goodsId, int nums)
        throws NullPointerException, NotEnoughException{
    /**生成销售的订单
     * */
    Sale sale=new Sale();
    sale.setGid(goodsId);
    sale.setNum(nums);
    saleDao.insertSale(sale);
 
    /**修改库存
     * */
    Goods goods=goodsDao.selectGoodsById(goodsId);
    if(goods==null){
        throw new NullPointerException(goodsId+"没有该商品");
    }
    if(goods.getAmount()<nums){
        throw new NotEnoughException(goodsId+"库存不足");
    }
 
    /**操作库存
     * */
    goods.setAmount(nums);
    goodsDao.updateGoods(goods);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_43730516/article/details/109192042

延伸 · 阅读

精彩推荐
  • Java教程Spring源码解析之Bean的生命周期

    Spring源码解析之Bean的生命周期

    今天给大家带来的是关于Java源码的相关知识,文章围绕着Bean的生命周期展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下...

    小猪爸爸8182021-09-19
  • Java教程误将.idea文件提交至git后删除的操作方法

    误将.idea文件提交至git后删除的操作方法

    这篇文章主要介绍了误将.idea文件提交至git后删除的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    立夏不立冬9662020-08-09
  • Java教程详谈Springfox与swagger的整合使用

    详谈Springfox与swagger的整合使用

    下面小编就为大家带来一篇详谈Springfox与swagger的整合使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Java教程网4422020-12-09
  • Java教程Java 单例模式的实现资料整理

    Java 单例模式的实现资料整理

    这篇文章主要介绍了Java 单例模式的实现的相关资料,并附简单实例代码,需要的朋友可以参考下...

    超超boy2682020-06-29
  • Java教程jackson在springboot中的使用方式-自定义参数转换器

    jackson在springboot中的使用方式-自定义参数转换器

    这篇文章主要介绍了jackson在springboot中的使用方式-自定义参数转换器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝...

    dimandsun6722022-02-15
  • Java教程智能手表开发API接口

    智能手表开发API接口

    这篇文章主要介绍了智能手表开发API接口,使用图灵机器人平台接口实现天气预报,非常简单实用,这里推荐给大家。 ...

    hebedich6272019-12-12
  • Java教程偷天换日,用 JavaAgent 欺骗你的 JVM

    偷天换日,用 JavaAgent 欺骗你的 JVM

    熟悉Spring的小伙伴们应该都对aop比较了解,面向切面编程允许我们在目标方法的前后织入想要执行的逻辑,而今天要给大家介绍的Java Agent技术,在思想上与...

    码农参上11212021-11-15
  • Java教程Java实现医院管理系统

    Java实现医院管理系统

    这篇文章主要介为大家详细绍了Java实现医院管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    凯耐9232021-06-21