【Spring】怎么配置事务?看这一篇就够了

0、什么是事务

想象一个场景,A给B转账,A的钱转出去之后发生异常B没有收到钱,A的钱少了B的钱没有多,这不就乱套了吗?

所以就引出了事务这个概念:事务是数据库操作最基本的单元,逻辑上的一组操作,这一组操作要么都执行成功,要么都失败

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都 必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些操作 要么都完成,要么都取消,从而保证数据满足一致性的要求

如下这段代码,如果不添加事务管理,就会导致A的钱减少,但是B的钱没有增多,所以在Spring如何进行事务管理就显得非常重要了

public void zhuan() {
    bankDao.send();
    int i = 10 / 0;
    bankDao.receive();
}

Spring 中的事务管理分为两种形式,一种是编程式事务,一种是声明式事务.

编程式事务在项目中很少使用 , 这种方式需要注入一个事务管理对象TransactionTemplate,然后在我们代码中需要提交事务或回滚事务时自己写代码实现.

声明式事务管理建立在 AOP 基础上,本质是对方法前后进行拦截,所以声明式 事务是方法级别的。

下面来看看声明式事务是如何开启的

1、使用注解实现声明式事务管理

步骤一:在spring配置文件中声明事务管理器
<!--创建事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<!--注入数据源-->
    <property name="dataSource" ref="dataSource"></property>
</bean>
步骤二:在spring配置文件中,开启事务注解
<!--开启事务注解-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
步骤三:在spring配置文件中开启注解扫描
<!--开始注解扫描-->
<context:component-scan base-package="com.ff"></context:component-scan>
步骤四:根据业务需求在相应位置添加注解

@Transactional

这个注解可以添加到类上面也可以添加到方法上面

如果这个注解添加到类上面,表示这个类里面所有方法都开启事务

如果这个注解添加到方法上面,表示这个方法开启事务

@Service
public class BankService {

    @Autowired
    BankDao bankDao;

    //转账的方法
    @Transactional
    public void zhuan() {
        bankDao.send();
        int i = 10 / 0;
        bankDao.receive();
    }
}
测试
public class BankServlet {

    @Test
    public void zhuan(){

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        BankService bankService = context.getBean("bankService", BankService.class);
        bankService.zhuan();
    }
}

在执行完送钱操作后出现异常,最终双方钱数都没有发生改变,测试成功
在这里插入图片描述

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值