我不知道如何使用CommandLineJobRunner
调用Spring批处理中定义的作业,但对于我来说文档细节还不够。从命令行运行弹簧批处理作业
我按照Spring Batch official guide使用Java注释在Spring Batch中编写作业。 @EnableBatchProcessing
因为我想避免XML配置文件的工作,步骤的描述等
到目前为止,我有:
- 配置类(
com.package.bla.bla.ClassContainingTheBatchConfiguration
见下文),我已经把所有的使用@Bean
注释定义ItemReader
,ItemProcessor
,ItemWriter
,Job
和Step
(其中return jobs.get("nameOfTheJob")
见下文)。 - 一个带有
main
方法的类SpringApplication.run(...)
和和注释@ImportResource("classpath:META-INF/spring/applicationContext.xml")
导入一些我在Job中处理数据时需要的bean。
在Maven的一边,我现在使用的一些插件:
maven-jar-plugin
指定<addClasspath>true</addClasspath>
和包含的主要方法在标签<mainClass>
maven-assembly-plugin
类,因为我想一个独特的可执行jar
含在依赖关系中的所有东西,我使用<phase>package</package>
能够在package
阶段构建jar,我也使用<goal>single</goal>
能够正确使用t构建jar他assembly
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
抛出IOException
由于java.io.FileNotFoundException
关于com.package.bla.bla.ClassContainingTheBatchConfiguration
。我应该如何在命令行中指定参数才能执行作业?
哦,我忘了提及包含'main'方法的类是用'@ EnableAutoConfiguration'注解的。我实际上想对我可以运行的工作有某种控制,即选择'SpringApplication.run(...)'应该运行哪个工作。这就是为什么我想我可能会使用'CommandLineJobRunner'来提供一个带注释的类而不是XML配置文件。 – TPPZ
使用'@ EnableAutoConfiguration',您可以设置“spring.batch.jobName”(最多RC3)或“spring.batch.jobNames”(自昨天起)列出要执行的作业(请参阅https://github.com /spring-projects/spring-boot/blob/master/docs/howto.md#execute-spring-batch-jobs-on-startup)。如果你愿意,你可以在你的主要方法中做到这一点,但最好在命令行上传递它(有点像你试图用CLJR做的那样)。 –
这听起来像个好消息!那么我应该如何指定这个'spring.batch.jobName'参数?我想我可以在'@ EnableAutoConfiguration'(它调用'BatchAutoConfiguration')附近设置一些东西,但事实并非如此。我将Maven中的Spring Boot父版本设置为'1.0.0.RC3'。 (我对Spring相当陌生,坚持使用文档和源代码浏览) – TPPZ