2

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

如今,他们有一个@EnableBatchProcessing注释可以设置很多东西。默认情况下,注释使用数据源作为其工作数据,但我们不想保存这些数据,也不想为它创建表。该文档说明了有关自定义的内容,但我无法使其正常工作:

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

public class AppConfig extends DefaultBatchConfigurer {

在我们的旧版本中,我们已经能够使用MapJobRepositoryFactoryBean类,因此它将所有数据保存在内存中。反正有没有使用完整的 JavaConfig 方式而不定义一个DataSource?我无法让它工作。

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

任何人都知道如何让这个工作?还是唯一的解决方案是回到以 XML 方式配置它?

4

2 回答 2

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

于 2013-06-13T19:01:32.400 回答
-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 时自动调用

于 2013-08-06T04:06:12.147 回答