SimpleBatchConfig 没有选择我的 DefaultBatchConfigurer

SimpleBatchConfig not picking up my DefaultBatchConfigurer

我写了一个简单的演示来覆盖默认的jobrepo。而不是基于地图我想要一个 H2 数据库来保存持久元数据。

因此我写了一个 CustomBatchConfigurer 是这样的:

@Configuration
public class CustomBatchConfigurer extends DefaultBatchConfigurer {

    @Autowired
    @Qualifier("repo-db")
    DataSource dataSource;

    @Override
    public void setDataSource(DataSource dataSource) {
        super.setDataSource(dataSource);
    }

    @Bean(name = "repo-db")
    public DataSource getJobRepoDataSource() {
        return DataSourceBuilder
                .create()
                .url("jdbc:h2:tcp://localhost/~/src/spring-batch/batch_repo")
                .driverClassName("org.h2.Driver")
                .username("sa")
                .password("test")
                .type(HikariDataSource.class)
                .build();
    }
}

但是Spring-Batch 没有提取它:

    o.s.b.c.c.a.DefaultBatchConfigurer: No datasource was provided...using a Map based JobRepository

我做错了什么?我以为我已经按照 spring 文档参考

上的说明进行操作

感谢和问候, 约尔格

您的配置应该更像这样:

@Configuration
public class CustomBatchConfiguration {

    @Bean
    public BatchConfigurer batchConfigurer(@Qualifier("repo-db") DataSource dataSource) {
        return new DefaultBatchConfigurer(dataSource);
    }

    @Bean(name = "repo-db")
    public DataSource jobRepoDataSource() {
        return DataSourceBuilder
                .create()
                .url("jdbc:h2:tcp://localhost/~/src/spring-batch/batch_repo")
                .driverClassName("org.h2.Driver")
                .username("sa")
                .password("test")
                .type(HikariDataSource.class)
                .build();
    }
}

如果你的 bean 方法被代理(这是默认的),你也可以将第一个 bean 方法简化为

@Bean
public BatchConfigurer batchConfigurer() {
    return new DefaultBatchConfigurer(jobRepoDataSource());
}

请再看看官方文档:https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/job.html#javaConfig