Chunk 방식은 정형화된 방식이라면 Tasklet 방식은 비교적 자유로운 방식이다. 따라서 실제로 batch를 사용할때 적어도 내가 경험해본 프로젝트에서는 Tasklet 방식을 훨씬 선호하였다. 이것도 Chunk와 마찬가지로 전에 Xml Config 방식으로 어떻게 사용하는지 살펴본적이 있는데 Springboot 기반의 Batch에서는 어떻게 사용을 하는지 알아보자. batch application 구조를 어떻게 잡느냐에 따라 Tasklet을 작성하는 방법은 다양하게 변할 수 있다. (Tasklet 내부를 작성하는건 동일하다. 표현법만 다를 뿐이다..) 필자는 크게 두가지 방법으로 구성을 해봤는데 Job 구성 클래스 외부에 tasklet 클래스를 만들어서 참조하는 방식이 있다. 이것은 tasklet 클..
지난 글에서 다뤘던 Springboot Batch Chunk Example에서 소스들을 살펴 볼때 Listener도 살짝 나왔다. 우리가 정의한 Job이나 Step 실행 전 후로 필요한 공통 작업을 기술하기 위해 주로 사용되며 사용된다. 이전에 사용했던 그림에 추가적으로 listener를 붙여봤다. 조악하기 그지 없다. listener 자체가 이해하기 그렇게 어려운 개념은 아니기에 이정도 그림이면 이해를 할것이라고 생각한다.. Job Listener Job의 실행 전후에 처리해야 할 일이 있을때 작성을 한다. 사용방법은 다음과 같다. @Bean public Job sampleChunkJob(SampleJobListener jobListener, Step sampleChunkStep) { return jo..
Spring Framework의 개발환경이 Springboot 기반으로 변함에 따라 Spring Batch의 개발방식도 이전과는 많이 달라졌다. 필자가 전에 쓴 Spring Batch에 관한 글은 Springboot 기반이 아니라서 Batch Job을 작성하면 maven build를 해서 jar로 결과물을 만들어내고 이것에 대한 실행파일을 script로 만들어서 그 script를 동작시켜 실행하곤 했다. 이런 불편함을 없애주고 설정도 간결하게 할 수 있는 Springboot 기반의 Batch가 나왔고 이제는 대세가 되었다. 따라서 이전에 작성했던 Spring Batch Chunk Example 도 Springboot 기반으로 동작시키기 위해 글을 써본다. Springboot기반이라 많은 부분이 달라졌는데..
A bean with that name has already been defined ~ 관련 오류 *************************** APPLICATION FAILED TO START *************************** Description: The bean 'sampleChunkJob', defined in class path resource [com/example/batchprocessing/SampleChunkJob.class], could not be registered. A bean with that name has already been defined in file [C:\sample-project\workspace-study\batch-processing\targ..
Spring Batch 환경을 구성할때 Job이 여러개 있고 이것을 실행시켰을때 어떤 결과가 나올까? 정답은 "모든 Batch Job이 실행이 된다. " 이다. 내가 만든 Job 중 특정 Job만 실행을 시키고 싶다면 어떻게 해야 할까? 간단히 해결할 수 있다. application.properties (or application.yml) spring.batch.job.names=${job.name:NONE} application.properties에 위와 같은 구문을 추가시켜주고 Boot Dashboard > 프로젝트 우클릭 > Open Config > Arguments tab > Program arguments 에서 다음을 넣어준다. --job.name=실행시키고 싶은 job 이렇게 넣어준 후에 De..
Parameterized Trigger를 사용하면 다양한 Job간의 연계작업을 할 수 있다. 전에 살펴본대로 후속 job으로 parameter 값도 넘길 수 있고 후속 job으로 여러가지 job 동시에 실행시키는것도 가능하다. Parameterized Trigger를 사용하면 아주 간단하게 실행시킬 수 있다. bjob이 실패했을때 다음 job을 cjob과 djob이 동시 실행이 되도록 하고 싶다. bjob의 하단에 빌드 후 조치 부분에 Trigger parameterized build on other projects 를 선택한다. 위와 같이 빌드가 실패(Failed)를 했을때 어떤 프로젝트(cjob, djob)를 수행할것인지 명시해주면 된다. 여러가지 job을 동시에 실행시키고 싶은 경우에는 위처럼 , ..
Parameterized Trigger 를 사용하면 후속 작업을 지정 및 수행할 수 있을뿐만이 아니고 현재 job의 param값, 넘기고 싶은 변수값도 넘겨줄 수 있다. 다음은 bjob에서 cjob으로 param값을 넘기는 예제이다. Parameterized Trigger Plugin 설치 방법은 여기를 참고하도록 한다. 일단은 bjob과 cjob에 각각 위와 같이 String Parameter로 값을 넣어준다. 하나씩 해도 되지만 여러개의 param을 보낸다고 가정하고 두개씩 보내는걸로 테스트 환경을 꾸렸다. cjob 설정 및 수행결과 cjob만 단독으로 수행을 한 결과이다. 당연히 위에서 param을 설정한대로 testparam1, testparam2에 대한 출력을 해준다. 설정한대로 cjob par..
Jenkins를 사용하다가 실패한 Job에 대해서는 어떻게 처리를 하는게 가장 좋을까 고민을 하고 있다. 전에 다뤘던 pipeline을 사용해서 실패한 job에 대한 처리를 하는 방법도 있지만 이건 pipeline job을 한셋 더 만들어야 하는 불편함이 있었다. (물론 안만들고도 script에 다 때려 박는 방법도 있지만..) 그러던 중 Parameterized Trigger plugin를 사용하여 아주 간단하게 고민을 해결할 수 있었다. 사용법에 대해서 알아보자. Parameterized Trigger plugin 설치 Jenkins 관리 > 플러그인 관리 > Parameterized Trigger 검색하여 Parameterized Trigger plugin 설치를한다. 설치가 되었다면 사용할 수 있..