如何使SpringJUnit4ClassRunner荣幸地在persistence.xml中设置db设置,而不是application.properties?

时间:2015-07-12 15:15:37

标签: java spring spring-boot spring-test

我正在使用SpringBoot(1.2.5.RELEASE)。我喜欢在persistence.xml中定义持久性单元的风格(包含数据库连接设置),并在单独的XML中定义entityManagerFactorytransactionManager。 (好吧,这是传统的春天的设置。我只是习惯了它)

运行弹簧靴时,我定义:

@SpringBootApplication
@ImportResource({"classpath:consult.xml"})
public class ConsultApp {
}

它工作正常。 PU / EMF / txMgr没问题。

但是当我想测试春豆时。我发现我必须在application.properties中重新定义数据库设置。这是我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:consult.xml"})
@TransactionConfiguration(transactionManager= "consultTxMgr", defaultRollback=false)
@Configurable
public class ConsultTest {
}

我已经分配了此consult.xml,但如果我未在spring.datasource.*中定义application.properties,则会报告Error creating bean with name 'dataSource' ...错误。

我不知道为什么相同的XML文件可以在spring-boot中工作,但是在spring-test中无法工作。为什么SpringJUnit4ClassRunner无法跟踪persistence.xml中定义的PU?

persistence.xmlapplication.properties中的重复数据库设置很难闻。有没有办法让弹簧测试尊重persistence.xml中的设置?

执行测试时,我似乎连接到DB,有关hibernate的消息,正确记录了表。但为什么它只需要datasource定义!?

错误日志:

[main] WARN  o.s.c.s.GenericApplicationContext - Exception encountered during context initialization - cancelling refresh attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$JdbcTemplateConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$JdbcTemplateConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined

感谢。

0 个答案:

没有答案