我正在尝试让 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/