Spring Boot Batch启动失败:找不到DataSourceTransactionManager Bean
问题解决:Spring Batch启动提示缺少DataSourceTransactionManager Bean
问题原因
引入spring-boot-starter-data-jpa后,Spring Boot会自动配置JpaTransactionManager作为默认事务管理器,而非DataSourceTransactionManager。你的step1方法直接声明依赖DataSourceTransactionManager类型,导致容器无法找到对应Bean,启动失败。
解决方案(二选一即可)
方案1:使用通用事务管理器类型
将step1方法的事务管理器参数类型改为更通用的PlatformTransactionManager(JpaTransactionManager是它的子类),Spring会自动注入适配的事务管理器:
@Bean public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, FlatFileItemReader<MatchInput> reader, MatchDataProcessor processor, JdbcBatchItemWriter<Match> writer) { return new StepBuilder("step1", jobRepository) .<MatchInput, Match> chunk(3, transactionManager) .reader(reader) .processor(processor) .writer(writer) .build(); }
方案2:手动注册DataSourceTransactionManager Bean
在BatchConfig类中新增一个Bean定义,明确创建DataSourceTransactionManager:
@Bean public DataSourceTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
添加后,容器中就会存在DataSourceTransactionManager类型的Bean,满足step1方法的依赖需求。
内容的提问来源于stack exchange,提问作者sman03
相关产品推荐
相关产品推荐

