Spring测试:UnknownServiceException:ConnectionProvider

时间:2013-12-19 13:28:54

标签: spring hibernate testing

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

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

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

org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]

什么可能导致此异常?之前的春季背景是否未正确关闭?

编辑/添加:在启动期间尝试在bean中启动事务时,实际上会引发上述异常。 (Lifecycle.start())。所以问题是为什么在应该存在的时候没有可用的休眠SessionFactory - 而且还有为第一个测试类创建的第一个spring测试上下文。

2 个答案:

答案 0 :(得分:0)

异常可能是由于在SessionFactory关闭时尝试创建新会话而引起的

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

test context:

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上下文的引用泄漏引起的(在自定义代码中)。