자바에서 스케줄러를 이용하여 정기적으로 동작을 수행 하는 방법을 알아 보겠습니다.
실습환경
- JDK 8
- Spring 5.0.8, XML 기반
환경설정(mvc-config.xml)
XML을 기반으로 하는 예제임으로 web.xml에 연결된 정보를 아래와 같이 기술 합니다.
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <annotation-driven> <argument-resolvers> <beans:bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" /> </argument-resolvers> </annotation-driven> <context:component-scan base-package="kr.jnu" /> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/view/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> <resources location="/resources/" mapping="/resources/**"/> <resources location="/favicon.ico" mapping="/favicon.ico"/> <resources location="/robots.txt" mapping="/robots.txt"/> <interceptors> <!-- 모바일 구분 --> <interceptor> <mapping path="/**"/> <exclude-mapping path="/resources/**" /> <beans:bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor"/> </interceptor> </interceptors> <!-- 스케줄러설정 --> <task:annotation-driven executor="myExecutor" scheduler="myScheduler"/> <task:executor id="myExecutor" pool-size="5"/> <task:scheduler id="myScheduler" pool-size="10"/> </beans:beans>
상단의 xmlns 부분은 공통화 부분임으로 필요하신 부분만 넣으시면 됩니다만 일반적으로 위와 같이 하시면 spring의 대부분을 설정 할 수 있습니다. 중요설정부분 으로 task 옵션이 들어가는 부분을 참고하시면 되겠습니다. 특히나 component-scan 부분은 자신에 맞게 꼭 바꾸셔야 됩니다.
코드내용
package kr.jnu; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class Schedul { /* * 5초 마다 실행 */ @Scheduled(fixedDelay=5000) public void init() { System.out.println("init"); } /** * 매일 22시에 수행 */ @Scheduled(cron="0 00 22 * * ?") public void download() { System.out.println("download"); } }
- @Scheduled 어노테이션 설정 예시 값
cron |
리눅스의 CronTab 과 동일한 속성으로 주기를 설정 |
fixedDelay |
최종 종료시간으로부터 지정된 millisecond 이후 수행 |
fixedRate | 이전 시작시간으로부터 지정된 millisecond 이후 수행 |
- cron 설정 예시 값
구분 | 초 |
분 |
시간 |
일 |
월 |
요일 |
범위 | 0 ~ 59 |
0 ~ 59 |
0 ~ 23 |
1 ~ 31 |
1 ~ 12 JAN ~ DEC |
1(일) ~ 7(토) SUN ~ SAT |
특수문자 | , - * / | , - * / ? L W | , - * / | , - * / ? L # | ||
비고 |
- 특수(복합)문자 사용 표
값 | 설명 |
* |
전체 범위 |
? |
지정된 값 없음 |
- |
지정 범위 |
, |
복수 값 |
/ |
시작/간격 |
L |
해당 범위의 마지막 값 |
W |
가장 가까운 평일 |
LW |
마지막 값과 시작값 |
# |
요일/주차 |
Spring 5에서 실행결과 년도 부분은 에러가 발생하여 제외 하였습니다 ^^ 그리고 위버전은 3.X까지 크게 설정이 다르지 않는 것으로 보입니다.
※ Spring 스케줄러 task 설정 원문 링크
https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html
'촌놈 - 취미로하는개발 > 웹' 카테고리의 다른 글
PHP 코드 정리 사이트 소개 - PHP Formatter (0) | 2018.11.23 |
---|---|
PHP mail 함수를 이용해서 메일 보내기 - 첨부파일 포함 (1) | 2018.11.23 |
[Javascript] 자바스크립트 게시물 링크 자동 생성하기 - autolink.js (0) | 2018.11.22 |
[Tomcat] 톰캣 자원 모니터링 - JMX (0) | 2018.11.16 |
JSP Oracle JDBC 데이터베이스 연결 예제 (3) | 2018.11.02 |