问题描述
似乎 @SpringBatchTest
要求使用 dataSoruce
bean,但我的 JPA 在 persistence.xml
中定义如下:
<persistence-unit name="MysqL" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.connection.driver_class" value="com.MysqL.cj.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:MysqL://db/data"/>
<property name="hibernate.connection.provider_class" value="org.hibernate.hikaricp.internal.HikariCPConnectionProvider"/>
<property .../>
</persistence-unit>
而且我似乎无法从这个 persistence.xml
XML 内容 (data-core.xml) :
<bean id="emfData" class="org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean">
<property name="persistenceUnitName" value="MysqL"/>
</bean>
<bean id="txMGrdata" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emfData"/>
</bean>
<tx:annotation-driven transaction-manager="txMGrdata"/>
<jpa:repositories base-package="destiny.data"
entity-manager-factory-ref="emfData"
transaction-manager-ref="txMGrdata"
/>
代码如下:
@Configuration
@ImportResource("classpath:/data-core.xml")
class DataSourceConfig {
@PersistenceContext(unitName = "MysqL")
private lateinit var em : EntityManager
@Inject
@Qualifier("emfData")
private lateinit var emfData : EntityManagerFactory
@Primary
@Bean
fun dataSource(): DataSource {
logger.info("emfData = {}",emfData)
return em.entityManagerFactory.let { emf ->
logger.info("em.emf = {}",emf)
val emfInfo = (emf as EntityManagerFactoryInfo)
logger.info("emfInfo = {}",emfInfo)
logger.info("emfInfo.dataSource = {}",emfInfo.dataSource)
emfInfo.dataSource!!
}
}
companion object {
val logger = KotlinLogging.logger { }
}
}
它输出:
emfData = org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean@102c24d1
em.emf = org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean@102c24d1
emfInfo = org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean@102c24d1
emfInfo.dataSource = null
好的,dataSource 现在为空。初始化 JobConfig implements DefaultBatchConfigurer
时会抛出 NPE :
@Inject
override fun setDataSource(dataSource: DataSource) {
logger.info("setting dataSource to {}",dataSource)
super.setDataSource(dataSource)
}
我该怎么办?
有没有办法直接使用 entityManager / entityManagerFactory 测试 SpringBatch,而无需任何预定义的 dataSource
bean ?
(这不是 spring-boot 环境)
谢谢。
(春季批次 4.3.1,春季批次 5.2.9)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)