为什么Spring在调用@Transactional Propagation时创建事务?没有方法? &



我有一个集成测试:

@SpringBootTest(classes = {CarWebServiceApplication.class, CarTestHelper.class})
@Slf4j
public class CarRepositoryTest {
@Autowired 
private CarTestHelper carTestHelper;
@Test
public void aSimpleTest() {
carTestHelper.simpleTest();
}
}

CarTestHelper:

@TestComponent
@RequiredArgsConstructor
@Slf4j
public class CarTestHelper {
@Transactional(propagation = Propagation.NEVER,  transactionManager ="carTransactionManager")
public void simpleTest() {
}
}

设置日志级别为:

org.springframework.orm.jpa: trace
org.springframework.transaction: trace

我看

TRACE 17920—[main]t.a.a notationtransactionattributesource:添加事务方法"com.example.repository.CarTestHelper。带属性的simpleTestPROPAGATION_NEVER ISOLATION_DEFAULT;"carTransactionManager">

TRACE 17920—[main] s.t.i. transactioninterceptor:办理交易(com.example.repository.CarTestHelper.simpleTest)

TRACE 17920—[
main] .s.t.i. transactioninterceptor:正在完成transaction for [com.example.repository.CarTestHelper.simpleTest]

从API中,我看到了Propagation。从来没有的意思是:

以非事务方式执行,如果存在事务则抛出异常。

但是,为什么日志显示该方法是事务性的,并且在调用该方法时它正在获取和完成事务?该方法实际上是以事务方式执行的,这意味着API Javadoc是不正确的吗?

NEVER的意思是如果一个事务已经处于活动状态就应该抛出异常,而不是说一个事务永远不应该启动。