You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot批处理报错:找不到'dataSource' Bean求助

解决Spring Batch + MongoDB中缺失dataSource Bean的问题

错误原因

Spring Batch默认依赖JDBC数据源存储作业元数据(如作业执行记录、步骤执行状态等),会自动查找名为dataSource的Bean。但你已经通过spring.autoconfigure.exclude排除了JDBC数据源的自动配置,且未提供替代的元数据存储方案,因此触发该错误。

解决核心思路:配置Spring Batch使用MongoDB存储作业元数据,替代默认的JDBC实现。


具体解决方案

1. 添加Spring Batch MongoDB依赖

首先确保项目引入spring-batch-mongodb依赖,这是Spring Batch支持MongoDB元数据存储的必要组件:

Maven:

<dependency>
    <groupId>org.springframework.batch</groupId>
    <artifactId>spring-batch-mongodb</artifactId>
    <version>与你的Spring Boot版本匹配即可</version>
</dependency>

Gradle:

implementation 'org.springframework.batch:spring-batch-mongodb'

2. 修改BatchConfig配置类

调整配置,创建基于MongoDB的JobRepository和事务管理器,替换默认的JDBC实现:

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private MongoTemplate mongoTemplate;

    // 配置MongoDB版JobRepository(存储作业元数据)
    @Bean
    public JobRepository jobRepository() throws Exception {
        MongoJobRepositoryFactoryBean factoryBean = new MongoJobRepositoryFactoryBean();
        factoryBean.setMongoTemplate(mongoTemplate);
        factoryBean.setTransactionManager(mongoTransactionManager());
        factoryBean.afterPropertiesSet();
        return factoryBean.getObject();
    }

    // 配置Mongo事务管理器
    @Bean
    public MongoTransactionManager mongoTransactionManager() {
        return new MongoTransactionManager(mongoTemplate.getMongoDatabaseFactory());
    }

    // 以下原有Bean保持不变
    @Bean
    public Job jobBean(JobRepository jobRepository, JobCompletionNotificationImpl listener, Step step){
        return new JobBuilder("job", jobRepository)
                .listener(listener)
                .flow(step)
                .end()
                .build();
    }

    @Bean
    public Step step(JobRepository jobRepository, MongoTransactionManager transactionManager, ItemReader<Product> reader,
                     ItemProcessor<Product,Product> processor, ItemWriter<Product> writer){
        return new StepBuilder("jobStep", jobRepository)
                .<Product,Product>chunk(5, transactionManager)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }

    @Bean
    public FlatFileItemReader<Product> reader(){
        return new FlatFileItemReaderBuilder<Product>()
                .name("itemReader")
                .resource(new ClassPathResource("data.csv"))
                .linesToSkip(1)
                .delimited()
                .names("title", "description", "price", "discount")
                .targetType(Product.class)
                .build();
    }

    @Bean
    public ItemProcessor<Product,Product> itemProcessor(){
        return new CustomItemProcessor();
    }

    @Bean
    public ItemWriter<Product> itemWriter(){
       return list -> {
           for(Product product : list)
               mongoTemplate.save(product);
       };
    }
}

3. 验证Product实体类

确保Product类包含所有需要的字段,且每个字段都有对应的getter/setter方法(否则CSV数据无法正确映射,处理逻辑也会失效):

public class Product {
    private String title;
    private String description;
    private String price;
    private String discount;
    private String discountedPrice;

    // 所有字段的getter和setter
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }

    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }

    public String getPrice() { return price; }
    public void setPrice(String price) { this.price = price; }

    public String getDiscount() { return discount; }
    public void setDiscount(String discount) { this.discount = discount; }

    public String getDiscountedPrice() { return discountedPrice; }
    public void setDiscountedPrice(String discountedPrice) { this.discountedPrice = discountedPrice; }
}

4. 保留现有application.properties配置

你的配置已经正确排除了JDBC数据源自动配置,无需修改:

spring.application.name=BatchProcessing
spring.data.mongodb.uri=mongodb://localhost:27017/batch
spring.data.mongodb.auto-index-creation=true
server.port=8080
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

内容的提问来源于stack exchange,提问作者Shivam Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:15:39