2014-02-24 6 views
6

CommandLineJobRunner을 사용하여 스프링 배치에 정의 된 작업을 호출하는 방법을 모르겠다. 설명서가 충분하지 않습니다.커맨드 라인에서 스프링 배치 작업 실행

나는 Java 주석을 사용하여 Spring Batch에서 작업을 작성하기 위해 Spring Batch official guide을 따라 갔다. 나는 등, 작업, 단계의 설명

를 XML 설정 파일을 피하기 싶었 기 때문에 @EnableBatchProcessing 지금까지 내가 가진 :

  • 나는 모든 넣어 한 구성 클래스 (com.package.bla.bla.ClassContainingTheBatchConfiguration은 아래 참조) @Bean annotaion을 사용하여 ItemReader, ItemProcessor, ItemWriter, JobStep (아래 return jobs.get("nameOfTheJob"))을 정의하는 항목입니다.
  • main 메서드를 사용하는 클래스는 SpringApplication.run(...)이고, 주석은 @ImportResource("classpath:META-INF/spring/applicationContext.xml")으로 가져와 작업의 데이터를 처리 할 때 필요한 일부 빈을 가져옵니다. 메이븐 측면에서

나는 현재 어떤 플러그인을 사용하고 있습니다 : <addClasspath>true</addClasspath>을 지정

  • maven-jar-plugin 및 태그 <mainClass>
  • maven-assembly-plugin의 주요 메소드를 포함하는 클래스는 내가 들어있는 고유의 실행 jar을 좋아하기 때문 종속성에있는 모든 것들, 나는 단계를 사용하여 항아리를 구축 할 수 있도록 package 단계에서 항아리를 만들 수 있도록 <phase>package</package>을 사용하고 있습니다. 그는 assembly
  • maven-compiler-plugin 나는 내가 구성하는 데 필요한 모든 일을 구성한 생각 나는 자바 1.7

를 사용하고 지정하지만 메이븐 BUILD SUCCESS을 가진 후 나는 명령 줄에서 작업을 실행할 수 없습니다입니다 :

java -cp ./target/JAR_FILE_NAME.jar org.springframework.batch.core.launch.support.CommandLineJobRunner com.package.bla.bla.ClassContainingTheBatchConfiguration nameOfTheJob 

com.package.bla.bla.ClassContainingTheBatchConfiguration에 관한 인해 java.io.FileNotFoundExceptionIOException을 던지고있다. 작업을 실행하기 위해 명령 행에서 매개 변수를 어떻게 지정해야합니까?

답변

2

스프링 부트에서 이미 SpringApplication을 사용하고 있다면 @EnableAutoConfiguration과 Maven 플러그인을 사용해야합니다 (예 : this guide 참조). 그렇게하면 빠르게 작동하는 무언가를 얻을 수 있으며 나중에 언제든지 자신의 기능을 추가 할 수 있습니다.

+0

오 주'main' 메소드를 포함하고있는 클래스에'@ EnableAutoConfiguration' 주석이 달려 있다는 것을 잊어 버렸습니다. 실제로 나는 실행할 수있는 작업에 대해 일종의 제어를하고 싶습니다. 즉, 어떤 작업이'SpringApplication.run (...) '에 의해 실행되어야 하는지를 선택했습니다. 그래서 XML 구성 파일이 아닌 주석 클래스를 제공하는'CommandLineJobRunner'를 어떻게 든 사용할 수있을 것이라고 생각한 것입니다. – TPPZ

+1

'@ 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). 원한다면 main 메소드에서 그렇게 할 수는 있지만 커맨드 라인에서 전달하는 것이 더 나을 것입니다 (CLJR로하려고했던 것처럼). –

+0

좋은 소식처럼 들리네! 그럼'spring.batch.jobName' 매개 변수를 어떻게 지정해야합니까? 나는'@ EnableAutoConfiguration' ('BatchAutoConfiguration'을 호출 중입니다) 근처에 뭔가를 설정할 수 있다고 생각했지만 그렇지 않습니다. Maven의 Spring Boot 부모 버전을'1.0.0.RC3'으로 설정했습니다. (나는 Spring에 익숙하지 않으며 문서와 소스 코드 브라우징으로 붙어있다.) – TPPZ

1

CommandLineJobRunner에 첫 번째 인수가 @Configuration FQCN 대신 자원 경로, 휴식 것이다 CommandLineJobRunnerstart() 방법에서 호출 년대 ClassPathXmlApplicationContext 생성자 인 경우. 이미 CLJR을 대체하는 main()와 클래스를 작성한 경우

int start(String jobPath, String jobIdentifier, String[] parameters, Set<String> opts) { 

    ConfigurableApplicationContext context = null; 

    try { 
     context = new ClassPathXmlApplicationContext(jobPath); 

, 명령 줄에서 클래스 이름으로 CLJR을 통과 할 수 없습니다. 그 대신에 전달하십시오.

+0

그래, 나는 확신하지 못했다. 음,'main' 메소드를 포함하고있는 클래스에서 나는 어떤 작업이 실행되어야하는지 명시 적으로 지정하고 싶습니다. SpringApplication.run (...)과 함께'main' 메소드를 사용하는 방법을 찾을 수 없습니다. – TPPZ

+1

'java -jar ... --spring.batch.jobNames = myJobName'이 작동하지 않았습니까? –

+1

@DaveSyer :이 명령은 좋아 보인다. 작업 매개 변수를 전달하는 방법과 작업 구성 빈에서 같은 작업을 추론하는 방법은 무엇입니까? – PavanSandeep

관련 문제