从命令行运行Spring Batch作业

时间:2014-02-24 16:47:38

标签: spring maven maven-plugin spring-batch

我不知道如何使用CommandLineJobRunner调用Spring Batch中定义的Job,文档详细信息对我来说还不够。

我已经跟随Spring Batch official guide使用Java注释在Spring Batch中编写作业,例如@EnableBatchProcessing因为我想避免使用XML配置文件来描述作业,步骤等。

到目前为止,我有:

  • 一个配置类(com.package.bla.bla.ClassContainingTheBatchConfiguration见下文),其中我列出了定义ItemReaderItemProcessorItemWriterJob的所有内容,和Stepreturn jobs.get("nameOfTheJob")见下文)使用@Bean注释。
  • 使用main方法SpringApplication.run(...)@ImportResource("classpath:META-INF/spring/applicationContext.xml")注释的类,以便在处理作业中的数据时导入我需要的bean。

在Maven方面,我目前正在使用一些插件:

  • maven-jar-plugin指定<addClasspath>true</addClasspath>以及包含标记<mainClass>
  • 中主要方法的类
  • maven-assembly-plugin因为我想要一个唯一的可执行文件jar,其中包含依赖项中的所有内容,我使用<phase>package</package>来构建package中的jar阶段,我也使用<goal>single</goal>来使用assembly
  • 正确构建jar
  • maven-compiler-plugin指定我使用的是Java 1.7

我认为我已经配置了所有需要配置的东西,但是在拥有Maven BUILD SUCCESS后,我无法从命令行运行该作业:

java -cp ./target/JAR_FILE_NAME.jar org.springframework.batch.core.launch.support.CommandLineJobRunner com.package.bla.bla.ClassContainingTheBatchConfiguration nameOfTheJob

由于IOExceptionjava.io.FileNotFoundException而引发com.package.bla.bla.ClassContainingTheBatchConfiguration。我应该如何在命令行中指定参数以便执行作业?

3 个答案:

答案 0 :(得分:2)

如果您已经在Spring Boot中使用SpringApplication,那么为什么不完成这项工作并使用@EnableAutoConfiguration以及Maven插件(例如参见this guide)?通过这种方式,您可以快速获得一些工作,并且您可以随时添加自己的功能。

答案 1 :(得分:1)

如果CommandLineJobRunner的第一个参数是您的@Configuration FQCN而不是资源路径,那么ClassPathXmlApplicationContext的{​​{1}}构造函数将从CommandLineJobRunner start()调用方法会中断。

int start(String jobPath, String jobIdentifier, String[] parameters, Set<String> opts) {

    ConfigurableApplicationContext context = null;

    try {
        context = new ClassPathXmlApplicationContext(jobPath);

如果您已经编写了一个main()的类,它取代了CLJR,那么您不应该在命令行中传递CLJR作为类名。传递它。

答案 2 :(得分:0)

不要使用spring.batch.job.enabled = false 然后使用java -jar [jar-files] --spring.batch.job.names = [job-name]

运行