Выполнение пакетных заданий Spring из командной строки
я не знаю, как вызвать задание, определенное в весенней партии, используя CommandLineJobRunner
, детали документации недостаточно для меня.
я следил за официальное руководство весенней партии для написания заданий в весенней партии с использованием аннотаций Java, например @EnableBatchProcessing
потому что я хотел избежать файлов конфигурации XML для описания задания,шагов и т. д.
пока у меня:
- класс конфигурации (
com.package.bla.bla.ClassContainingTheBatchConfiguration
см. ниже), где я поставил все вещи, определяющиеItemReader
,ItemProcessor
,ItemWriter
,Job
иStep
(Сreturn jobs.get("nameOfTheJob")
см. ниже) с помощью@Bean
annotaion. - класс
main
методSpringApplication.run(...)
и аннотации@ImportResource("classpath:META-INF/spring/applicationContext.xml")
для импорта некоторых бобов мне нужно при обработке данных в задании.
на стороне Maven я в настоящее время использую некоторые плагины:
-
maven-jar-plugin
задание<addClasspath>true</addClasspath>
и класс, содержащий основной метод в теге<mainClass>
-
maven-assembly-plugin
потому что я хотел бы уникальный исполняемыйjar
содержащий все вещи в зависимостях, я использую<phase>package</package>
уметь строить фляги вpackage
фаза, я также использую<goal>single</goal>
уметь правильно строить 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
. Как указать параметры в командной строке для выполнения задания?
2 ответов
Если вы уже используете SpringApplication
из Spring Boot, почему бы не закончить работу и использовать @EnableAutoConfiguration
, а также плагин Maven (см., например,данное руководство)? Таким образом, вы получите что-то работает довольно быстро, и вы всегда можете добавить свои собственные функции.
если первый аргумент CommandLineJobRunner
ваш @Configuration
FQCN вместо пути к ресурсу,ClassPathXmlApplicationContext
конструктор, который вызывается из CommandLineJobRunner
' s start()
метод сломать.
int start(String jobPath, String jobIdentifier, String[] parameters, Set<String> opts) {
ConfigurableApplicationContext context = null;
try {
context = new ClassPathXmlApplicationContext(jobPath);
если вы уже написали класс main()
, который заменяет CLJR
, вы не должны проходить CLJR
как имя класса в командной строке. Лучше передай это.