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

spring批处理作业存储库的Groovy bean语法

东方灵均
2023-03-14

我正在创建一个由groovy bean builder支持的spring批处理(spring boot)。但是,我无法找到以下xml结构的正确语法:

<batch:job-repository/>

更新:豆子。棒极了

beans {

    xmlns([ctx: 'http://www.springframework.org/schema/context', batch: 'http://www.springframework.org/schema/batch'])
    ctx.'component-scan'('base-package': 'mypackage')
    ctx.'annotation-config'()


  itemReader(MyItemReader) {}

  itemProcessor(MyItemProcessor) {}

  itemWriter(FlatFileItemWriter) { ... }

    batch.job(id: 'job1') {
        batch.step(id: 'step1') {
            batch.tasklet {
                batch.chunk(
                    reader: 'itemReader',
                    writer: 'itemWriter',
                    processor: 'itemProcessor',
                    'commit-interval': 1
                )
            }
        }
    }

  //Option 1: will this work?
  //batch.'job-repository'()

  //Option 2: all job related beans defined individually, because cannot get <batch:job-repository/> in groovy bean syntax
    jobRepository(MapJobRepositoryFactoryBean) {
        transactionManager = ref('transactionManager')
    }

    jobRegistry(MapJobRegistry) { }

    jobLauncher(SimpleJobLauncher) {
        jobRepository = ref('jobRepository')
        taskExecutor = { SyncTaskExecutor executor -> }
    }

    jobExplorer(JobExplorerFactoryBean) {
        dataSource = ref('dataSource')
    }

    jobOperator(SimpleJobOperator) {
        jobLauncher = ref('jobLauncher')
        jobRepository = ref('jobRepository')
        jobRegistry = ref('jobRegistry')
        jobExplorer = ref("jobExplorer")
    }

}

我想使用选项1技术,如果我这样做,我会得到“beanName must not empty”错误。我没有使用选项2中的bean,而是它们似乎在工作。

我假设使用选项1,将使用其他定义的bean自动配置jobRepository等。

共有1个答案

毛正浩
2023-03-14

我为名称空间选项添加了一个Jira票证。然而,当您将注释与Groovy DSL相结合时,您也可以解决它,下面是Spring Boot Batch中的一个示例:

如果您有一个应用程序类,可以使用@EnableBatchProcessing对其进行注释,以获得请求的行为:

import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.context.annotation.ComponentScan

@ComponentScan
@EnableAutoConfiguration
@EnableBatchProcessing
public class Application
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(Application.class, "appcontext.groovy").run(args)
    }
}

然而,您并不是在一个地方拥有所有配置。

 类似资料:
  • 我已经开始探索Spring Batch,并遇到了一些基本问题。

  • 这似乎是一个愚蠢的问题。我正在尝试为Spring Batch作业存储库(Spring Batch 2.1.7)配置Oracle10g数据库,我能够使用在core中的org/spring框架/批/core/schema-oracle10g.sql可用的脚本创建表。我还将属性batch.data.source.init设置为false。 在干净的数据库上,我的批处理程序运行良好,成功地创建了所有批处理

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

  • 我们正试图建立关于如何在大型IT服务中使用Spring Batch的标准,并具有不同的商业利益。 我们可能会有几个属于不同业务领域的批次。我们已经知道其中一些必须从所有批次通用的表中获取一些参数(即Java和COBOL;例如日期参数)。 我们将实现的Spring批处理作业的数量很难评估。没有重写现有COBOL批次的目标,只要有可能,就鼓励连续流程处理。 一些关于概念证明的问题不时出现,但目前几乎没