[issue] 스케쥴러 중복 실행

joyful·어제
0

Java/Spring

목록 보기
29/29

✅ 현상

운영 서버에서 스케쥴러가 중복 실행되는 문제 발생


✅ 원인

  • Spring Legacy 프로젝트에서 @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-scanexclude-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>
profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글