声明式事务@Transaction和@readOnly属性

标签:?spring基础学习

@Transaction的readOnly属性,为什么要使用声明式事务

声明式事务

    只需要在spring的配置文件中,进行事务声明,声明将哪些方法加入事务环境进行执行

二,为什么要使用声明式事务

亚博竞猜APPwww.yabox3.com亚博yabo线上投注大多数Spring用户选择声明式事务管理的原因是,这个是对应用代码影响最小的选择,使用aop的特点在某个方法执行前开启事务,结束时提交事务,因此也最符合 非侵 入式 轻量级容器的理念。

1,Spring声明式事务管理可以在任何环境下使用。只需更改配置文件, 它就可以和JDBC、JDO、Hibernate或其他的事务机制一起工作。

2,Spring的声明式事务管理可以被应用到任何类(以及那个类的实例)上。

3,Spring提供了声明式的回滚规则。

4,Spring允许你通过AOP定制事务行为。(例如,如果需要,你可以在事务回滚中插入定制的行为。 你也可以增加任意的通知,就象事务通知一样。)。

5,Spring不提供高端应用服务器提供的跨越远程调用的事务上下文传播。如果你需要这些特性,我们推荐你使用EJB。 然而,不要轻易使用这些特性。因为通常我们并不希 望事务跨越远程调用。

方式一:不添加任何注解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
上面分别执行了一个插入方法,int a = 10/0,和一个删除方法,,系统抛出异常,但是插入的方法执行成功了,数据库仍然增加了数据,说明没有事务回滚。(没加注解当然不会回滚啊)
在这里插入图片描述
如果在 银行转账中,我的账户money减少了,对方的账户money不变,那么这个转账就变成了一个死账了,那么遇到这种情况该怎么办呢?

方式二:配置@Transactional(readOnly=true)注解

在这里插入图片描述
还是执行相同的方法
在这里插入图片描述
在这里插入图片描述
回滚了JDBC 的连接 ,数据库没有变化

方式三:配置@Transactional注解
在这里插入图片描述
在这里插入图片描述
数据库没有变化,回滚了JDBC 的连接,说明注解生效