Spring测试:未知服务异常:ConnectionProvider

Spring测试:未知服务异常:ConnectionProvider,spring,hibernate,testing,Spring,Hibernate,Testing,我有许多测试类启动spring上下文,每个类都包含hibernate(和EntityManagerFactory) 自定义TestExecutionListener确保spring上下文始终标记为脏,因此上下文永远不应该被重用 在spring上下文的后续启动期间(不是第一次启动),我得到: 什么会导致此异常?以前的spring上下文是否未正确关闭 编辑/添加:在启动期间,当尝试在bean中启动事务时,实际上会引发上述异常。(Lifecycle.start())。所以问题是为什么在应该有hiber

我有许多测试类启动spring上下文,每个类都包含hibernate(和EntityManagerFactory)

自定义TestExecutionListener确保spring上下文始终标记为脏,因此上下文永远不应该被重用

在spring上下文的后续启动期间(不是第一次启动),我得到:

什么会导致此异常?以前的spring上下文是否未正确关闭


编辑/添加:在启动期间,当尝试在bean中启动事务时,实际上会引发上述异常。(
Lifecycle.start()
)。所以问题是为什么在应该有hibernate SessionFactory的时候没有可用的hibernate SessionFactory,并且对于创建的第一个spring测试上下文(对于第一个测试类)也有可用的hibernate SessionFactory。异常可能是由于在SessionFactory关闭时尝试创建新会话造成的

确保您没有在非事务性测试中调用事务性方法


原来这是由于对旧spring上下文(在自定义代码中)的引用泄漏造成的。

您的意思是应该将@Transactional放在所有可能使用数据库的测试上吗。这样的注释已经在bean中的适当位置上了。我不明白为什么在加载Spring上下文并且当前正在刷新(启动)时SessionFactory应该关闭。我说的是AbstractTransactionalJUnit4SpringContextTests。谢谢。但测试本身不应该是事务性的。事务是在某些bean中的“更深”级别启动的。此外,使用TransactionalTestExecutionListener和@Transactional运行我的测试不会改变任何东西。
org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
In the TestContext framework, transactions are managed by the TransactionalTestExecutionListener, which is configured through the @TestExecutionListeners annotation by default, even if you do not explicitly declare @TestExecutionListeners on your test class. To enable support for transactions, however, you must provide a PlatformTransactionManager bean in the application context loaded by @ContextConfiguration semantics. In addition, you must declare @Transactional either at the class or method level.
... test methods that are not annotated with either @Transactional (at the class or method level) or @NotTransactional will not be run within a transaction.