将 spring 从 4.1.7 升级到 4.3.2 时出现"无法检索平台事务管理器"错误



我们有一个使用弹簧框架的4.1.7版本的项目。当我将弹簧版本更改为4.3.2时,几个JUNIT测试失败了。示例堆栈跟踪:

java.lang.IllegalStateException: Failed to retrieve PlatformTransactionManager for @Transactional test for test context [DefaultTestContext@497aec8c testClass = TesteMBeanDialogoAtivarSessao, testInstance = br.gov.tcu.arquitetura.test.util.contexto.TesteMBeanDialogoAtivarSessao@3b9632d1, testMethod = testarMBeanDialogoAtivarSessao@TesteMBeanDialogoAtivarSessao, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@64f16277 testClass = TesteMBeanDialogoAtivarSessao, locations = '{}', classes = '{class br.gov.tcu.arquitetura.tu.spring.config.SpringTestConfig}', contextInitializerClasses = '[]', activeProfiles = '{tu}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[[empty]], contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]].
    at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:194)
    at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:269)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at br.gov.tcu.arquitetura.tu.util.junit.SpringRepeatExtended.evaluate(SpringRepeatExtended.java:40)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

所有这些测试都以弹簧4.1.7成功运行。他们具有以下常见配置:

@RunWith(SpringJUnit4ClassRunnerExtended.class)
@ContextConfiguration(classes = {SpringTestConfig.class})
@ActiveProfiles(PROFILE_TU)
@Transactional
@TransactionConfiguration(defaultRollback = true)

我用@Rollback替换@TransactionConfiguration(defaultRollback = true),但同样的错误仍然存在。我想念什么细节(我希望这是一个细节:^((我错过了?

i通过添加datasourcetransaction managerautoconfiguration.class

解决此问题
@RunWith(SpringJUnit4ClassRunnerExtended.class)
@ContextConfiguration(classes = {SpringTestConfig.class, DataSourceTransactionManagerAutoConfiguration.class})
@ActiveProfiles(PROFILE_TU)
@Transactional
@TransactionConfiguration(defaultRollback = true)

最新更新