java - Spring批处理2.2 JavaConfig

标签 java spring annotations spring-batch

我正在尝试让 Spring Batch 2.2 与 JavaConfig 一起使用。

现在,他们有一个 @EnableBatchProcessing 注释来设置很多东西。 默认情况下,该注释使用数据源作为其作业数据,但我们不想保存此数据,也不想为其创建表。该文档说了一些关于定制的内容,但我无法让它工作:

  • 用户必须在上下文中提供 DataSource 作为 Bean,或者在配置类本身中实现 ​​BatchConfigurer,例如:

公共(public)类 AppConfig 扩展 DefaultBatchConfigurer {

在旧版本中,我们已经能够使用 MapJobRepositoryFactoryBean 类,以便它将所有数据保存在内存中。无论如何,是否可以使用完整的 JavaConfig 方式而不定义 DataSource ?我还没能让它发挥作用。

即使我定义了两个数据源(一个永远不会被使用的内存中的 HSQL)和我们真正的 Oracle 数据源,它也不起作用,因为它找到两个数据源而不是一个。

有人知道如何让它工作吗?或者唯一的解决方案是返回以 XML 方式进行配置?

最佳答案

假设没有其他工件需要数据源,您可以使用 java config 创建一个没有数据源的上下文。为此,您的配置需要扩展 DefaultBatchConfigurer,正如您所指出的。在那里,您将重写两个方法:createJobRepository() 和 setDataSource()。下面是一个示例上下文(它没有定义作业或步骤,但它正确引导所有相关的 bean)。

@Configuration
@EnableBatchProcessing
public static class BatchConfiguration extends DefaultBatchConfigurer {

    @Override
    protected JobRepository createJobRepository() throws Exception {
        MapJobRepositoryFactoryBean factory = 
            new MapJobRepositoryFactoryBean();
        factory.afterPropertiesSet();
        return  (JobRepository) factory.getObject();
    }

    @Override
    @Autowired
    public void setDataSource(DataSource dataSource) {
        if(dataSource != null) {
            super.setDataSource(dataSource);
        }
    }

    @Bean
    public DataSource dataSource() {
        return null;
    }
}

我确实认为简化此功能将是一个有用的功能,并将其添加到 Jira 中。您可以在这里跟踪它的进度:https://jira.springsource.org/browse/BATCH-2048

关于java - Spring批处理2.2 JavaConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17090739/

相关文章:

java - 使用 GSON 反序列化 json 作为时间戳

java - routeContext 中的 PropertyPlaceholderConfigurer。无法从属性文件设置 uri

java - Spring Data Mongodb 排序内部数组

java - 使用java进行公钥加密(加密字符串与原始字符串长度相同)

java - AWS Lambda 函数内存大小是可变的还是常量?

java - 为什么组合器不影响输出?

java - 使用 Swagger UI 的基本身份验证

java - 使用注释创建原型(prototype)范围的 Spring bean?

java - 如何为自己的注释创建可选参数?

java - 注释不可见?