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

时间:2014-05-02 20:32:38

标签: groovy spring-batch

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

<batch:job-repository/>

更新: beans.groovy

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一定不能为空'错误。我没有使用选项2中的bean,而是使用它们。

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

1 个答案:

答案 0 :(得分:0)

我为命名空间选项添加了Jira ticket。但是,当您将注释与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)
    }
}

但是,您没有在一个地方进行所有配置。