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编写一个属于自己的日历,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起尝试一下
    2022-05-05
  • Java多边形重心计算

    Java多边形重心计算

    今天小编就为大家分享一篇关于Java多边形重心计算,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java数据结构之数组(动力节点之Java学院整理)

    Java数据结构之数组(动力节点之Java学院整理)

    这篇文章主要介绍了Java数据结构之数组(动力节点之Java学院整理)的相关资料,包括创建和内存分配,数组封装后的使用等,需要的朋友参考下吧
    2017-04-04
  • java中struts2实现文件上传下载功能

    java中struts2实现文件上传下载功能

    这篇文章主要介绍了java中struts2实现文件上传下载功能的方法,以实例形式分析了struts2文件上传下载功能的实现技巧与相关问题,具有一定的参考借鉴价值,需要的朋友可以参考下
    2016-05-05
  • 死磕 java同步系列之synchronized解析

    死磕 java同步系列之synchronized解析

    这篇文章主要介绍了Java中syncronized正确使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-06-06
  • Java的Hibernate框架中Criteria查询使用的实例讲解

    Java的Hibernate框架中Criteria查询使用的实例讲解

    这篇文章主要介绍了Java的Hibernate框架中Criteria查询使用的实例讲解,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2016-01-01
  • SpringBoot3 响应式网络请求客户端的实现

    SpringBoot3 响应式网络请求客户端的实现

    本文主要介绍了SpringBoot3 响应式网络请求客户端的实现,文章详细阐述了如何使用SpringBoot3的网络请求客户端进行HTTP请求和处理响应,并提供了示例代码和说明,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • springboot默认日志框架选择源码解析(推荐)

    springboot默认日志框架选择源码解析(推荐)

    这篇文章主要介绍了springboot默认日志框架选择源码解析(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 利用Mybatis Plus实现一个SQL拦截器

    利用Mybatis Plus实现一个SQL拦截器

    SQL拦截器是一种用于拦截和修改Mybatis执行的SQL语句的工具,通过使用SQL拦截器,开发人员可以在执行SQL语句之前或之后对其进行修改或记录,本文就来借助一下Mybatis-Plus实现一个SQL拦截器吧
    2023-05-05
  • Lock、Condition实现简单的生产者消费者模式示例

    Lock、Condition实现简单的生产者消费者模式示例

    这篇文章主要介绍了Lock、Condition实现简单的生产者消费者模式示例,需要的朋友可以参考下
    2014-04-04

最新评论