두번째, 스프링 배치보다 간편한 스프링 Quartz

 

두번째, 스프링 배치보다 간편한 스프링 Quartz



2편 마지막편!!! 두둥~

이번 편은, WAS 구동 중에 Job 시작/중지를 시켜보는 동적으로 하는 방법을 알아보자!

 지난 편에는 WAS 시작(Start)할 때 크론 표현식(cron expression)가 Job 사용 여부를 가져와서

“org.springframework.scheduling.quartz.SchedulerFactoryBean”에 등록했었죠?

기억 하시나요? ^^;; 기억 안 나셔도 괜찮습니다.
지난 편 보고 천천히 오세요~

 “SchedulerFactoryBean”을 상속해서 “MySchedulerFactoryBean”을 스프링 빈(Spring Bean)으로 등록했었습니다.

 이제 우리가 하고자 하는 것은 WAS를 shutdown 하지 않고, Quartz Job을 동작 중인 것을 중지하거나, 중지된 것을 재시작하는 것을

해 보려고 합니다. 물론, 크론 표현식도 변경해서 말이죠!

원리는 이렇습니다.
“MySchedulerFactoryBean”에 새로운 트리거를 주입(DI, Dependency Injection)를 해주는 겁니다.

 예를 들어서, “oneTrigger”가 있습니다.

“oneTrigger”가 가지고 있는 것은 2가지입니다.

 1번째는 잡(JobDetail)
2번째는 크론 표현식(Cron Expression)

트리거 역활은 어떤 잡(Job)을 어떤 시간(Cron Expression)에 수행할 것인가?
이것입니다.

 트리거(trigger)란?

총의 방아쇠를 뜻하는 사격 용어로서, 어떤 사건의 반응/사건을 유발한 계기나 도화선의 의미를 말합니다.
연쇄반응을 일으키는 촉매제라고 할 수 있죠~

 일반적으로 잡(Job) 변경하려면, 소스 검수도 받아야 하고 자바 클래스도 반영해야 합니다.

대개 수정이나 변경이 잘 일어나지 않죠?
그리고 운영 중인 서비스에 관리자 POC(Point Of Contact)에서 자바 클래스를 맘대로 올릴수 있게 하지도 않겠죠?

자바 클래스도 동적으로 변경하고 싶다면 스프링 배치(Spring Batch) 프로젝트를 이용해 보세요 ㅠㅜ
그거까지 원하신다면 여기 잘못 찾아오셨습니다. 이히히~

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 저는 운영중인 배치 스캐줄러의 시작/중지와 크론 표현식 변경에 초점을 맞추었습니다.

다시 본론으로 돌아가죠^^

 
여기서 스프링의 마법인 자바 리플렉션(java reflection)을 보실수 있습니다.
너무 거창했나요? ㅋㅋ

 한번 빠져봅시다.

 스프링에서 ApplicationContextAware 이녀석 많이 보셨죠?
제가 참 좋아하는 녀석입니다. 

 스프링 프레임워크로 개발하다가 보면 Bean Id로 ApplicationContext 객체를 얻어서 스프링 빈(Bean)을 가져오는 것을

경험해 보신 분들이 있을 겁니다.

“ApplicationContextAware” 이 녀석을 구현하면 스프링 빈 가져오는 것은 식은 죽 먹기죠!! ㅋㅋ
아래처럼 구현해서 유틸성으로 공통으로 사용하면 아주 좋습니다. 좋구요!

 
이제 원하는대로 스프링에서 트리거(trigger)와 잡(job)을 가져올 수 있게 되었습니다.
오예~ 이제 절반 이상한 겁니다.

WAS 운영 중에 동작 중인 잡(Job)을 중지하고 싶다면 “MySchedulerFactoryBean”에서 해당 트리거(trigger)를 스케줄러팩토리빈(MySchedulerFactoryBean)에서
삭제하시면 됩니다. 두둥~;;;;

중지했던 잡(Job)을 다시 재시작하고 싶다면 스케줄러팩토리빈(MySchedulerFactoryBean)에 추가해 주시면 됩니다 ;;;;;
참 쉽죠? ㅠㅜ

위에 말했던 것처럼 트리거는 2가지 프로퍼티를 가지고 있습니다.
첫번째는 잡(Job), 두번째는 크론 표현식(cron expression)입니다.

첫번째는 프로퍼티는 잡(Job)이기 때문에 ApplicationContext 을 이용해서 스프링 빈(Bean) 가져올 수 있겠죠?
두번째도 마찬가지로 크론 표현식으로 변경해서 주입(DI, Dependency Injection)하면 됩니다.

제가 말이 너무 길었죠?
저도 개발자니까 소스 코드로 말하겠습니다. 

일단 트리거(trigger)가 존재하는지 체크하는 것은 스케줄러팩토리빈(MySchedulerFactoryBean)에 존재하는지 체크하는 것입니다.
해당 트리거 이름으로 트리거를 가져왔는데 없다면 등록되어 있지 않다는거죠?
그래서, 새롭게 트리거를 추가해 주는겁니다. ^^ㅎㅎㅎ

트리거가 존재한다면 기존 트리거 삭제할 수도 있어요!
해당 잡(Job)을 사용 안함으로 하겠다면 등록된 트리거 삭제하면 되겠죠?
해당 잡(Job) 의 크론 표현식을 변경하고 싶다면 등록된 트리거를 삭제하고, 크론 표현식 변경된 트리거를 새로 등록하면 주면 되는 원리입니다.

참 쉽죠?? ㅎㅎㅎ
너무 구구절절 딴길로 많이 샜지만 여기까지 읽어주셔서 감사합니다.

개발자가 우뚝 서는 그날까지 여러분 즐거운 코딩하세요!!

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
106 Spring MVC Dropdown Box Example file 졸리운_곰 2018.03.26 214
105 SpringBoot JPA 예제 졸리운_곰 2018.03.13 344
104 스프링 CKEditor 적용 - 에디터 졸리운_곰 2018.03.07 2594
103 spring ckeditor 파일업로드 예제 (file upload) file 졸리운_곰 2018.03.07 2036
102 CKEditor 사용 및 파일 업로드 적용 졸리운_곰 2018.03.07 164
101 Spring MVC Checkbox And Checkboxes Example 자바 스프링 mvc 체크박스 샘플 file 졸리운_곰 2018.03.07 80
100 SPRING MVC - CHECKBOXES EXAMPLE 자바 스프링 mvc 체크박스 예제 file 졸리운_곰 2018.03.07 184
99 Spring MVC Dropdown Box Example 스프링 웹 개발 [콤보 선택 박스] file 졸리운_곰 2018.03.07 238
98 SPRING과 ANGULAR2 연동해서 실행하기 file 졸리운_곰 2018.02.12 198
» 두번째, 스프링 배치보다 간편한 스프링 Quartz 졸리운_곰 2018.02.08 118
96 첫번째, 스프링 배치보다 간편한 스프링 Quartz 졸리운_곰 2018.02.08 104
95 JAVA] Quartz (쿼츠)를 사용하여 자바 스케줄링(scheduling) 하기 졸리운_곰 2018.02.08 628
94 Spring Batch를 이용한 기본적인 Batch Application 졸리운_곰 2018.02.08 81
93 Quartz + Spring Batch 조합하기 file 졸리운_곰 2018.02.08 2061
92 스프링 web MVC와 앵귤러의 통합 How to configure AngularJs with Spring MVC | SpringBoot file 졸리운_곰 2018.01.28 204
91 스프링 부트와 앵귤러의 통합 : Spring Boot and AngularJS Integration Tutorial file 졸리운_곰 2018.01.28 492
90 mybatis에서 selectKey 사용법 졸리운_곰 2018.01.24 391
89 Spring form:form 태그 설명 졸리운_곰 2018.01.24 180
88 java spring form 태그 졸리운_곰 2018.01.24 147
87 Spring MVC - 값 전달 file 졸리운_곰 2018.01.24 94
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED