지난 글에서 다뤘던 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..
springboot는 이게 정말 왜 되지? 할 정도로 내장되어 있는 편리한 기능들이 많이 있다. 이번에 소개할 내용도 그렇다. 내부 로직을 까보지 않아서 정확한 동작원리는 파악하지 못했지만 그래도 급하게 DB 연동해서 테스트 할일이 있을때 편리하게 사용할 수 있는 샘플 프로젝트다. springboot 와 embedded hsql db의 조합이다. 빠르게 살펴보자. 프로젝트 생성 New Spring Starter Project 를 통해 프로젝트를 생성한다. dependency는 Spring Data JPA만 넣어준다. pom.xml org.hsqldb hsqldb runtime pom.xml 에는 위와 같이 hsqldb dependency를 추가해준다. 프로젝트 생성이 완료되면 위와 같은 모습일것이고 re..
지난 포스팅으로 RabbitMQ를 설치하는 방법에 대해서 알아보았다. 이 설치한 RabbitMQ와 management를 띄워놓고 Springboot를 연동하여 비동기통신을 하는 간단한 샘플을 만들어보자. 설치에 앞서 간단한 개념을 알아보자. Publisher(=Provider) 라는 메세지 발생의 주체가 있고 메세지를 발생 시킨다. 메세지를 rabbitTemplate (restTemplate 같은 개념이라고 이해하면 됨. RabbitMQ와 통신을 쉽게 해준다.) 이라는 RabbitMQ의 API를 이용해 RabbitMQ 영역으로 보내면 이를 받아주는건 Exchange이다. 메세지를 보낼때 어느 Exchange로 보낼지에 대한 정보와 이 Exchange는 어느 Queue로 routing이 되야 하는지에 대한..
springboot application을 기동하니 기동하자마자 로그 몇줄 찍히고는 바로 terminated 상태가 되어버린다. 오류도 나오지 않는다.. logging.level을 debug로 내리니 그래도 몇줄 더 보인다. 그리고 맨 마지막에는 아래와 메세지가 나왔다. 2020-10-08 23:00:35.704 DEBUG 17864 --- [extShutdownHook] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@7fcf2fc1, started on Thu Oct 08 23:00:33 KST 2020, parent: org...
springboot는 내장 톰캣을 사용하기에 server.xml 이라던지 context.xml 등등의 xml 설정파일이 없다. 하지만 이런 설정파일을 java config로 대체할 수 있다. 기존에 server.xml 에서 tomcat 간 session clustering을 했던것을 토대로 java config를 작성해본다. 기존 글과 비교해가면서 보면 이해가 쉽다. 필자의 환경은 springboot 2.1.15.RELEASE, tomcat 9.0.36, openjdk 11 version 을 사용중이다. pom.xml org.apache.tomcat tomcat-catalina-ha ${tomcat.version} 일단은 tomcat-catalina-ha 라는 dependency를 추가해줘야한다. Tom..