我不知道如何使用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