주기적 클래스 실행하는 방법 자동실행 일정간격 스케쥴링 JAVA Spring task scheduler
주기적 클래스 실행하는 방법 자동실행 일정간격 스케쥴링 JAVA Spring task scheduler
사용자가 뭔가 명령을 내리지 않아도 클래스를 자동 실행하고 싶을 때
사용하는 것이 Sping에 task scheduler 입니다.
몇시간 간격, 몇시부터 몇분간격 등등 주기적인 스케쥴링이 가능하죠.
그럼 사용법을 알아보도록 하겠습니다.
테스트 스펙부터 알아보죠.
[SPEC]
전자정부 프레임워크 3.6 (Spring 4.XX)
JAVA 8
TOMCAT 7
서버 실행 시 일정 간격으로 실행되어야 하는 class 는 구현되었다고 가정하겠습니다.
저의 경우에는 OpenAPI 로 특정 데이터를 받아 주기적으로 DB에 저장하는 클래스를 생성했습니다.
이제 본론으로 들어가서,
dispatcher-servlet.xml 을 열어주세요.
dispatcher-servlet.xml 을 열었으면 Namespaces 탭으로 이동합니다.
스케쥴링에 사용될 namespace는 task 입니다. 이것을 체크해서 추가해주세요.
그럼 다시 Source 탭으로 이동해서 task가 추가되었는지 확인합니다.
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation=http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd
xsi:schemaLocation 은 여러개가 사용중일 것이니 위의 내용이 있는지만 확인해주세요.
추가가 되었다면 이제 task 기능을 사용할 수 있습니다.
<bean id="batchExcuetor" class="egovframework.geon.citsts.collect.web.ScheduledJob" />
이제 주기적으로 실행할 클래스를 <bean>태그로 등록합니다. 그래야 메모리 상에 등록이 되고 사용이 가능하겠죠.
<task:scheduler id="taskScheduler" pool-size="10" />
<task:scheduled ref="batchExcuetor" method="getData" cron="0 0/3 * * * *" />
</task:scheduled-tasks>
그 후 위와 같이 task scheduler를 등록합니다.
taskScheduler 라는 id의 scheduler를 등록하고
위에서 등록한 batchExcuetor라는 클래스를 참조해
그 내에 있는 getData Method를 3분 간격으로 실행하겠다.
라는 의미 입니다.
다른 부분은 간단하니 넘어가도록 하고
시간 설정 하는 부분을 보도록 하죠.
예를들어 설명하겠습니다.
cron property를 보시면 "초 분 시 일 월 년" 으로 구성됩니다.
만약 매일 12시에 실행하겠다 한다면
cron="0 0 12 * * *"
12시간 마다 실행하겠다라면
cron="0 0 0/12 * * *"
이 됩니다.
매일 12시부터 시작해서 5분 간격으로 한다면
cron="0 0/5 12 * * *"
이런식으로 하시면 됩니다.