application-context.xml 에 다음을 밑줄 친 부분을 추가한다.
<beans xmlns="http://www.springframework.org/schema/beans"
...
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="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/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
그리고 아랫 부분도 추가해준다.
<context:component-scan base-package="패키지명" />
<bean id="scheduleJob" class="패키지명.클래스이름" />
<task:scheduler id="scheduler" pool-size="10" />
<task:annotation-driven scheduler="scheduler" />
xml 설정은 이걸로 끝난다. 매우 간단.
다음은 구현부인데 구현부도 간단하다.
@Component
public class Shceduler {
@Scheduled(cron="0 0 1 * * *")
public void sheduler() {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
String today = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println("스케쥴러 작동 시간 : " + today);
}
}
클래스 위에 @Component 어노테이션을 붙여주고, 구현 메서드에도 @Scheduled 어노테이션을 붙여주면 된다.
cron 표현식은 스케쥴러가 작동하는 주기.
아래 블로그에 cron 표현식에 대해 자세하게 정리되어 있다.
http://blog.naver.com/PostView.nhn?blogId=lovemema&logNo=140200056062
내 경우 하루에 한 번씩 주기적으로 쿼리문을 돌려야 해서 위 스케쥴러를 구현하게 되었다.
- 2019-02-19 추가
위 처럼 하면 스케쥴러가 중복실행되는 이슈가 발생한다.
이것은 바보처럼 Scheduler 클래스에 @Component 어노테이션을 붙였기 때문인데
xml에서 스케쥴러 세팅을 했는데도 클래스를 빈으로 등록하는 어노테이션을 선언했기 때문이다.
따라서 @Component 어노테이션은 삭제해주자...^^;;
'Java & Spring' 카테고리의 다른 글
인텔리J 스프링부트, MyBatis CamelCase 적용하기 (0) | 2021.02.26 |
---|---|
우분투(18.04)에 openjdk 11 설치하기 (0) | 2019.03.27 |
배열 정렬하기 (0) | 2019.02.07 |
<context : annotation-config> vs <context : component-scan> (0) | 2019.01.24 |
HttpURLConnection 설정 및 옵션 (0) | 2018.03.31 |