-
배치 프로그램 (Batch Program) 작성 예제Spring/배치 프로그램 2018. 9. 7. 10:29
웹사이트에서 로그인할 때 비밀번호를 변경하라는 공지를 심심찮게 받아볼 수 있다. 서버에서는 비밀번호 설정 후 일정 기간이 지났는지를 파악해 일정 기간(90일 등)이 지나면 변경 권장을 해야 한다. 이를 로그인 요청마다 체크할 수도 있지만 주기적으로(1일 혹은 2일에 한번 등...) 모든 계정에 대해 일정 기간이 지났는지 확인하는 방식으로 처리하면 오버헤드를 줄일 수 있다.
이와 같이 주기적으로 특정 동작을 수행하도록 하는 프로그램을 배치(Batch) 프로그램이라 하고, 실무에서도 굉장히 필수적일 것이라고 생각된다.
휴면계정 관리, 광고, 업데이트 소식, 알림, 청구 등의 기능을 배치프로그램으로 작성할 수 있다.
작성 방법 포스팅 ( STS 사용했다. 이클립스의 경우 같은 역할을 수행하는 방법이 상이할 수 있음 )새 자바 프로젝트 생성. 파일명 작성 후 Next
하위 폴더에서 마우스 오른쪽 - New Source Folder 클릭
- 하위 폴더들을 스프링과 같은 형태 (src/main/java, src/main/resources, src/test/java, src/test/resources) 만들어준다.만든 후 Finish
기본 설치된 src 폴더는 삭제
프로젝트 마우스 오른쪽 - Configure - Convert to Maven Project
주기 동작들을 Job이라 하는데 Job들 관리하기 위해 spring-context-support, quartz dependencies 메이븐 등록한다.
패키지에 TestJob.java 파일 생성 후 QuartzJobBean 상속받아 excuteInternal 메소드 오버라이딩한다. 이 메소드에 원하는 동작을 입력하면 된다.
src/main/resources에 configure 파일 두개 작성해야 한다.
마우스 오른쪽 - New - Spring Bean Configure file 클릭jobScheduler.xml 생성
배치 프로그램 설정을 정의한다. cronTriggger 스케줄러를 사용하는데 cron은 리눅스의 스케줄러를 의미한다.
1) JobDetailFactoryBean 클래스 등록
2) CronTriggerFactoryBean 등록해 주기 설정
3) SchedulerFactoryBean에 트리거(2번 설정) list에 등록
3가지 절차가 필요하다. 이후 Job 등록시에는 1, 2번 수행 후 3번 List에 등록하면 된다.
자세한 내용은 주석 참조<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 1. 동작 시키고자 하는 클래스 --> <bean id="testJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="com.blog.naver.test.TestJob" /> </bean> <!-- 반복 작업 상세 정의 트리거 : 배치를 실행시켜라 --> <bean id="testJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!-- CronTab : 실행 주기 설정. (Cron : 리눅스 스케줄러. 주기마다 수행) --> <!-- 1 * * * * 매 분 1초에 testJob을 수행해라. 0/5 : 5초에 한번 --> <property name="jobDetail" ref="testJob" /> <!-- 초, 분, 시, 일, 월 --> <property name="cronExpression" value="0/5 * * * * ?" /> </bean> <bean id="schedularFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="testJobTrigger"/> </list> </property> <property name="quartzProperties" > <props> <!-- Batch Job 실행시킬 Thread Pool --> <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop> <!-- Thread 수 --> <prop key="org.quartz.threadPool.threadCount">3</prop> <!-- Thread 동작 우선순위 --> <prop key="org.quartz.threadPool.threadPriority">4</prop> <!-- 쓰레드 관리 방식 (RAM) --> <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop> <!-- 동작하지 않을 때 대기할 시간 (ms) 60초 지나도 동작하지 않을 경우 Batch Job 실행되지 않는다. --> <prop key="org.quartz.jobStore.misfireThreshold">60000</prop> </props> </property> </bean> </beans>
testJobTrigger 빈의 cronExpression 프로퍼티에서 주기를 설정해준다. value에 주기를 설정할 수 있는데 앞부터 값을 넣어 설정할 수 있다.
cronExpression
의미
* * * * * ?
매 초마다
1 * * * * ?
매 분의 1초마다
5 * * * * ?
매 분의 5초마다.
0/5 * * * * ?
매 5초마다.
0 0 1 * * ?
매일 1시 0분 0초
메인 함수를 작성한다. 배치 프로그램 설정한 xml 파일을 등록해 수행시키면
다음과 같이 5초마다 동작하는 것을 확인할 수 있다. 이를 응용하면 다른 곳에도 활용할 수 있을 것이다.
'Spring > 배치 프로그램' 카테고리의 다른 글
배치 프로그램 (Batch Program) 예제 두번째 (0) 2018.09.07