<tx:method name=”purchase” propagation=”REQUIRED”/>不能单独作用!

我一直认为是等同于<tx:method name=”*”/>,今天做了下实验才发现不是。

从今天这件事我得到的教训是:

配置事务属性时<tx:method name=”*”/>很重要,千万别去掉。

联动:

java spring事务管理(五)使用xml配置文件的方式配置事务

一、问题场景

下面是配置文件:

发现了个问题:

这样并不等同于

如果单独使用<tx:method name=”purchase” propagation=”REQUIRED”/>,仅仅等同于:

虽然不报错,但是事务并没有起作用。

但是如果单独使用<tx:method name=”*”/>,相当于:

事务可以正常运作。

如果要配置多个属性要这样配:

好像少了这个<tx:method name=”*”/>都是不能起作用的!

二、尝试解决

为此我做了一个测试,在函数check()加上休眠5秒才执行功能。

然后这样配置:

设定回滚时间为3秒,因为休眠5秒方法才执行,所以保证了100%回滚。

说下思路:

  1. 如果事务属性起到作用的话,会因为超时而回滚。
  2. 如果没起到作用,那么就会购买成功。

结果为不能成功购买,表明事务配置成功了。

现在去掉<tx:method name=”*”/>

购买成功了,表明事务属性配置失败了。

三、总结

所以说<tx:method name=”*”/>是必要的!配置事务属性时<tx:method name=”*”/>很重要,千万别去掉。

发表评论

电子邮件地址不会被公开。 必填项已用*标注