我不知道如何使用CommandLineJobRunner
调用Spring Batch中定义的Job,文档详细信息对我来说还不够。
我已经跟随Spring Batch official guide使用Java注释在Spring Batch中编写作业,例如@EnableBatchProcessing
因为我想避免使用XML配置文件来描述作业,步骤等。
到目前为止,我有:
com.package.bla.bla.ClassContainingTheBatchConfiguration
见下文),其中我列出了定义ItemReader
,ItemProcessor
,ItemWriter
,Job
的所有内容,和Step
(return 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
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
。我应该如何在命令行中指定参数以便执行作业?
答案 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]
运行