Выполнение пакетных заданий Spring из командной строки
я не знаю, как вызвать задание, определенное в весенней партии, используя CommandLineJobRunner, детали документации недостаточно для меня.
я следил за официальное руководство весенней партии для написания заданий в весенней партии с использованием аннотаций Java, например @EnableBatchProcessing потому что я хотел избежать файлов конфигурации XML для описания задания,шагов и т. д.
пока у меня:
- класс конфигурации (
com.package.bla.bla.ClassContainingTheBatchConfigurationсм. ниже), где я поставил все вещи, определяющиеItemReader,ItemProcessor,ItemWriter,JobиStep(Сreturn jobs.get("nameOfTheJob")см. ниже) с помощью@Beanannotaion. - класс
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 как имя класса в командной строке. Лучше передай это.