我面临与交易管理相关的问题(特别是需要新的交易注释),具体如下:
- 我使用过Spring-boot(1.1.5.RELEASE) 一个。弹簧引导启动批量
湾弹簧引导起动数据JPA- 同样为此我使用了hibernate最新版本
醇>
我的jpa配置相关代码如下:
@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "xyz.persistence.repository")
public class JpaConfig {
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false);
hibernateJpaVendorAdapter.setGenerateDdl(false);
hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
return hibernateJpaVendorAdapter;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(dataSource);
lef.setJpaVendorAdapter(jpaVendorAdapter);
lef.setPackagesToScan("xyz.persistence.domain");
return lef;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
但在执行期间,我面临与交易管理相关的问题。
我在这个问题上挖了北斗,发现了下面列出的事件顺序:
- Spring-boot会按预期加载我的事务管理器
- 然而,在此之后,spring-boot加载spring-batch,从而加载SimpleBatchConfiguration。
- 由于SimpleBatchConfiguration也有事务管理器的定义(没有@ConditionalOnMissingBean),它会覆盖我的 事务管理
- 现在轮到spring-data-jpa,即JpaBaseConfiguration。这和transactionManager的定义几乎相似 我在jpaconfig中定义的内容。但这并不会超越 早期的定义为@ConditionalOnMissingBean。
醇>
因此,在所有初始化之后,我留下了Spring-batch注入的transactionmanager,导致事务管理器无法正常工作。
PS:这是使用spring-boot 0.5.0.m6(因为 JpaBaseConfiguration中没有@ConditionalOnMissingBean)**
我试图排除SimpleBatchConfiguration,但这也无效。
非常感谢任何帮助。
阿沛