我有许多启动spring上下文的测试类,每个类都包含hibernate(和EntityManagerFactory)。
自定义TestExecutionListener确保spring上下文始终标记为脏,因此永远不应重用上下文。
在弹出上下文(不是第一次启动)的后续启动期间,我得到:
org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
什么可能导致此异常?之前的春季背景是否未正确关闭?
编辑/添加:在启动期间尝试在bean中启动事务时,实际上会引发上述异常。 (Lifecycle.start()
)。所以问题是为什么在应该存在的时候没有可用的休眠SessionFactory - 而且还有为第一个测试类创建的第一个spring测试上下文。
答案 0 :(得分:0)
异常可能是由于在SessionFactory关闭时尝试创建新会话而引起的
确保您没有在非事务性测试中调用事务方法。
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.
TransactionalTestExecutionListener:
... test methods that are not annotated with either @Transactional (at the class or method level) or @NotTransactional will not be run within a transaction.
答案 1 :(得分:0)
原来它是由旧的spring上下文的引用泄漏引起的(在自定义代码中)。