@Transactional注解测试
@Transactional注解测试
情况1
@Transactional
public void A() {
B();
}
public void B() {
// 具体的业务操作,如插入
// 如果此处有RuntimeException将会回滚
}
说明:A方法上有@Transactional注解,B方法上没有@Transactional注解。此时Controller调用A方法,若B方法中有运行时异常就会回滚。A方法和B方法用的是同一个事务。
情况2
@Transactional
public void A() {
B();
}
@Transactional
public void B() {
// 具体的业务操作,如插入
// 如果此处有RuntimeException将会回滚
}
说明:A方法上有@Transactional注解,B方法上有@Transactional注解,B会默认加入A中的事务。同情况1,A方法和B方法用的是同一个事务。
情况3
public void A() {
B();
}
@Transactional
public void B() {
// 具体的业务操作,如插入
// 如果此处有RuntimeException不会回滚!!!!!
}
说明:A方法上没有@Transactional注解,B方法上有@Transactional注解,此种情况下当Controller调用A方法,不会开启事务,所以B方法有运行时异常不会回滚。
如果想要B方法上的注解生效,需要用如下方法实现:
@Autowired
private TestService testService;
public void A() {
testService.B(); // 或者用工具类SpringUtils.getBean(TestService.class).B();
}
@Transactional
public void B() {
// 具体的业务操作,如插入
// 如果此处有RuntimeException将会回滚
}
注意此时B方法中有运行时异常就会回滚,但是A方法本身没有开启事务,A中如果有异常,不会回滚。

浙公网安备 33010602011771号