Выполнение пакетных заданий Spring из командной строки

я не знаю, как вызвать задание, определенное в весенней партии, используя CommandLineJobRunner, детали документации недостаточно для меня.

я следил за официальное руководство весенней партии для написания заданий в весенней партии с использованием аннотаций Java, например @EnableBatchProcessing потому что я хотел избежать файлов конфигурации XML для описания задания,шагов и т. д.

пока у меня:

  • класс конфигурации (com.package.bla.bla.ClassContainingTheBatchConfiguration см. ниже), где я поставил все вещи, определяющие ItemReader, ItemProcessor, ItemWriter, Job и Stepreturn 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 как имя класса в командной строке. Лучше передай это.