gpt4 book ai didi

mysql - spring transaction 是否仅在进入服务方法中起作用?

转载 作者:行者123 更新时间:2023-11-28 23:58:03 24 4
gpt4 key购买 nike

我已经阅读了很多关于 spring transaction 的 stackoverflow 页面。我的 spring 事务配置是

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

我的服务是这样的。

@Service
public class TestServiceImpl implements TestService {
@Override
public void testRollback() {
testRollbackSecondLevel();
}

@Transactional
@Override
public void testRollbackSecondLevel() {
// any update sql in here
carCostService.testUpdate();

throw new RuntimeException();
}
}

然后我写了一个测试类来测试,在我的测试代码中,当我使用

// this test is not roll back, and the Transactional even not created
@Test
public void testTransactional() {
// use this function, the Transactional don't work
interCityService.testRollback();
}

// this test is roll back successfully
@Test
public void testTransactionalSecondLevel() {
// but if I use the second level function instead of the first function,
// the Transactional works fine, and the data can roll back
interCityService.testRollbackSecondLevel();
}

而且我调试代码,当我使用第一次测试时,事务性甚至没有被创建。第二个可以成功创建事务。

我用sql判断交易是否存在。

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G

如果sql返回空集,那么没有事务被创建。

那么问题是什么?提前致谢。

我用的是spring版本4.1.2.RELEASE。

最佳答案

spring @Transactional 使用代理工作,这意味着从同一个类调用带有此注解的方法没有任何影响 == @Transactional 将被忽略。有很多关于它的主题,请在这里查看更深入的解释:Spring @Transaction method call by the method within the same class, does not work?

关于mysql - spring transaction 是否仅在进入服务方法中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com