운영 서버에서 스케쥴러가 중복 실행되는 문제 발생
@Component
어노테이션이 선언된 클래스가 context-scan에 포함되면서 Bean이 중복 등록되는 현상 발생package com.test;
@Component("TestScheduler") //로컬 서버 시작해 놓으면 스케쥴러 중복 작동하여 실DB에 반영 될 수 있으므로 주석 처리
public class TestScheduler {
public TestScheduler() {}
...
@Scheduled(cron = "0 0 4 * * *")
public void checkData() throws Exception{
...
}
}
문제를 해결하기 위해 여러 접근법이 있지만, 이번 사례에서는 context:component-scan
의 exclude-filter를 설정하여 중복 실행을 방지함
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<!-- 아래에 추가-->
<context:exclude-filter type="assignable" expression="com.test.TestScheduler"/>
</context:component-scan>