使@Transactional和@Rollback与Spring Boot Test一起使用

时间:2018-09-13 06:45:39

标签: java spring spring-boot

我有一个Spring Boot应用程序,并使用@SpringBootTest进行了测试。
我正在尝试使每个测试的数据库处于相同状态。
我的测试课用@Transactional@Rollback注释。
而且我正在测试的服务还带有@Transactional的注释。
据我了解,在激活TransactionManager TRACE日志时,Spring Boot应用程序事务已提交,测试事务已按预期回滚。
问题来自以下事实:我的设置创建了2种不同的交易:一项用于测试,另一项用于应用程序。

您知道我该怎么做才能使测试中创建的交易在应用程序中相同吗?

示例代码:
https://github.com/sey/transactional
您会看到GreetingsResourceTest失败,因为我认为有2个不同的上下文不共享事务。
但是,由于在测试期间没有创建特定的应用程序上下文,因此GreetingsServiceTest可以按预期工作。

1 个答案:

答案 0 :(得分:0)

Spring的传播级别e表示与Transactional注释一起使用的事务传播行为。是您使用@Transactional覆盖Spring如何创建事务的唯一方法:

MANDATORY
Support a current transaction, throw an exception if none exists.

NESTED
Execute within a nested transaction if a current transaction exists, behave like      PROPAGATION_REQUIRED else.

NEVER
Execute non-transactionally, throw an exception if a transaction exists.

NOT_SUPPORTED
Execute non-transactionally, suspend the current transaction if one exists.

REQUIRED
Support a current transaction, create a new one if none exists.

REQUIRES_NEW
Create a new transaction, and suspend the current transaction if one exists.

SUPPORTS
Support a current transaction, execute non-transactionally if none exists.