当前位置: 首页 > 知识库问答 >
问题:

Spring批处理2.2 JavaConfig

公孙盛
2023-03-14

我正在尝试让Spring Batch2.2与JavaConfig一起工作。

现在,他们有一个@enableBatchProcessing注释,它设置了很多东西。默认注释为其职务数据使用datasource,但我们不想保存此数据,也不想为其创建表。文档中提到了一些关于自定义的内容,但我无法使其工作:

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

公共类AppConfig扩展DefaultBatchConfigurer{

在我们的旧版本中,我们可以使用MapJobRepositoryFactoryBean类,因此它将所有数据保存在内存中。是否可以使用完整的JavaConfig方式而不定义DataSource?我没能让它工作。

即使我定义了两个数据源(一个内存中的HSQL,但从未使用过)和真正的Oracle数据源,它也不能工作,因为它找到的是两个数据源,而不是一个。

有没有人知道怎么把它搞定?或者,唯一的解决方案是回到以XML的方式配置它?

共有1个答案

水昊阳
2023-03-14

假设没有其他工件需要数据源,您可以使用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

 类似资料:
  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 当我使用Spring批处理管理运行长时间运行的批处理作业的多个实例时,它会在达到jobLauncher线程池任务执行程序池大小后阻止其他作业运行。但是从cron中提取多个工作似乎效果不错。下面是作业启动器配置。 Spring批处理管理员Restful API是否使用不同于xml配置中指定的作业启动器?

  • 我对Spring批处理跳过逻辑有一些问题。我已经配置了一个作业的步骤来跳过两个异常(SQLIntegrityConstraintViolation异常和乐观锁定失败异常): 但当作业运行时,由于我将其配置为跳过的异常,作业以未知状态完成: 我做错什么了吗?我希望这一步跳过负责抛出其中一个异常的项,并继续处理,以便以完成状态结束。

  • 我在表中总共有8条记录,其中6条在spring批处理调用read时可以使用jpareader。现在我将页面大小和块大小设置为1以进行测试。期望作业运行时,它应该进行6次读取调用,然后它应该逐个处理,逐个写入。但实际上发生的是,它只是调用read 4次(从日志中我可以看到这样读取页面0...1)并处理4个,其中一个由于不匹配写入标准而被过滤掉,然后它只是更新了3个记录,作业标记为成功完成。

  • 在Spring batch中(请参见https://docs.Spring.io/spring-batch/3.0.x/reference/html/metadataschema.html),有六个表: batch_job_execution batch_job_execution_context batch_job_execution_params batch_job_instance batc

  • 我有一个Spring批处理作业,它通过SFTP从远程Linux服务器检索文件。远程服务器上的目录是一个包含七天文件(约400个文件)的存档。文件的大小相对较小。 Spring批处理知道哪些文件已经被处理。 当我启动应用程序时。第一次,Spring Batch tasklet检索文件时,Spring Batch会为它已经处理的每个文件生成一个异常: > 在Transformer类中,是否应该检查文件