Java & Spring2017. 12. 19. 00:06

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 어노테이션은 삭제해주자...^^;;

Posted by 홍규홍규