我正在努力让Spring Batch 2.2与JavaConfig一起工作。
现在他们有一个@EnableBatchProcessing
注释,可以设置很多东西。
默认情况下,注释使用数据源作为其作业数据,但我们不希望保存此数据,也不希望为其创建表。文档说明了一些关于自定义的内容,但我无法使其正常工作:
DataSource
作为bean,或者在配置类本身中实现BatchConfigurer
,例如: public class AppConfig extends DefaultBatchConfigurer {
在我们的旧版本中,我们已经能够使用MapJobRepositoryFactoryBean
类,因此它将所有数据保存在内存中。无论如何使用完整的JavaConfig方式而不是定义DataSource
?我无法让它发挥作用。
即使我定义了两个数据源(一个永远不会被使用的HSQL内存)和我们真正的Oracle数据源,它也不起作用,因为它找到了两个数据源而不是一个。
任何人都知道如何让这个工作?或者是回归到以XML方式配置它的唯一解决方案?
答案 0 :(得分:6)
假设没有其他工件需要DataSource,您可以使用java config创建没有DataSource的上下文。为此,您的配置需要在指出时扩展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
答案 1 :(得分:-1)
只需在BatchConfig类中定义dataSource()方法即可 这是如何
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(driverUrl);
dataSource.setUsername(driverUsername);
dataSource.setPassword(driverPassword);
return dataSource;
}
设置TransactionManager时会自动调用此项