Spring使用注解方式处理事务

 更新时间:2022年08月26日 14:22:20   作者:少年啊!  
这篇文章主要为大家详细介绍了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使用事务的注解就需要在application-config.xml(Spring核心配置文件)添加头部信息:

<?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文件:

/**使用注解来设值事务的属性(传播行为,隔离等级,超时,当哪些异常发生的时候触发回滚事务)
 * 注意:该注解必须使用在公有函数上,而且抛出的异常必需继承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);
}

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

相关文章

  • java线程的基础实例解析

    java线程的基础实例解析

    java中线程的基本方法的熟练使用是精通多线程编程的必经之路,线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文浅要的介绍一下它们的使用方式
    2021-06-06
  • 深入浅析Mybatis的缺陷问题

    深入浅析Mybatis的缺陷问题

    Mybatis是业界非常流行的持久层框架,轻量级、易用,在金融IT领域完全是领军地位,比Hibernate更受欢迎,优势非常多,也是非常值得我们学习的。这篇文章主要介绍了Mybatis的缺陷问题的相关资料,需要的朋友可以参考下
    2016-10-10
  • 如何解决java:找不到符号符号:类__(使用了lombok的注解)

    如何解决java:找不到符号符号:类__(使用了lombok的注解)

    在使用IntelliJ IDEA开发Java项目时,可能遇到通过@lombok注解自动生成get和set方法不生效的问题,解决这一问题需要几个步骤,首先,确认Lombok插件已在IDEA中安装并启用,其次,确保项目中已添加Lombok的依赖,对于Maven和Gradle项目
    2024-10-10
  • Java中的Map允许有重复元素吗?

    Java中的Map允许有重复元素吗?

    今天小编就为大家分享一篇关于Java中的Map允许有重复元素吗?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程

    spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程

    Spring Boot支持容器的自动配置,默认是Tomcat,当然我们也是可以进行修改的。这篇文章给大家介绍了spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程,需要的朋友参考下吧
    2018-01-01
  • Log4j新手快速入门教程

    Log4j新手快速入门教程

    这篇文章主要给大家介绍了关于Log4j新手入门的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Log4j具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • Java中Spring的单例模式使用

    Java中Spring的单例模式使用

    这篇文章主要介绍了Java中Spring的单例模式使用,spring中的单例也不影响应用并发访问。大多数时候客户端都在访问我们应用中的业务对象,为减少并发控制,不应该在业务对象中设置那些容易造成出错的成员变量,下面一起进入文章了解更多详细内容吧
    2022-01-01
  • Java嵌套for循环的几种常见优化方案

    Java嵌套for循环的几种常见优化方案

    这篇文章主要给大家介绍了关于Java嵌套for循环的几种常见优化,在Java中优化嵌套for循环可以通过以下几种方式来提高性能和效率,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • java编译命令和启动命令的使用方式

    java编译命令和启动命令的使用方式

    Java开发中,编译源文件需使用javac命令,该命令能将.java文件编译成.class字节码文件,后者可在JVM上运行,常用编译选项包括-d指定输出目录,-classpath设置类搜索路径等,启动Java程序使用java命令,它加载并运行包含main方法的类
    2024-10-10
  • java利用Ant脚本生成war包全过程

    java利用Ant脚本生成war包全过程

    这篇文章主要为大家详细介绍了java利用Ant脚本生成war包全过程,感兴趣的朋友可以参考一下
    2016-03-03

最新评论