我正在使用SpringBoot(1.2.5.RELEASE)。我喜欢在persistence.xml
中定义持久性单元的风格(包含数据库连接设置),并在单独的XML中定义entityManagerFactory
和transactionManager
。 (好吧,这是传统的春天的设置。我只是习惯了它)
运行弹簧靴时,我定义:
@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.xml
和application.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
感谢。