Spring에서 Scheduler를 이용하면, 아주 간단히(?) 일정 시간 간격으로 실행되는 job을 만들 수 있다.
Quartz를 사용하면 더 좋을 것 같은데, 우선 나는 이제 막 시작하는 단계이므로, spring scheduler사용하는걸로.
1. @EnableScheduling 애노테이션 추가.
Applicaion.java에 위 애노테이션 추가하고,
2. Scheduler Task를 수행할 클래스에 애노테이션 추가하기
Class에는 @Component 애노테이션을, 그리고 일정 간격으로 실행 될, 메소드에는 @Scheduled 애노테이션을 붙이면 된다. 나는 테스트용으로 5초간격으로 실행시킬 것이었으므로, fixedDelay = 5000으로.
일정 시각에 반복적으로 실행하고싶을 땐, cron으로 하면 된다고 한다. 자세한 설명은 아래 링크 참조
https://gomnezip.tistory.com/451
3. 실행!
intellij디버거로 돌려보니 일정 시간 간격으로 잘 돈다. 근데.. Tomcat에 올리려고 하다보니.. 안도네? 왜?
안돌겠지.. 어떤 설정도 안했으니. 찾아보니 servlet-context에 추가해주어야 한다고 한다.
servlet-context.xml파일을 만들고 (있으면 그냥 그거 열고) namespace에 다음을 추가
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="$Default
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"
xsi:schemaLocation에는 기존거 + 위 location을 추가한다.
위와 같이 추가해주고.. mvc의 default-servlet-handler는 이것저것 설정할 필요 없이 알아서 해주기 위해서 필요한 것 같아 추가해봤는데 제거하고 테스트 해봐야지.
web.xml에는 이 servlet을 추가하라고 해주니까 되더라
우선 이렇게 하면 일정간격으로 실행되는 것까진 했다. 중복실행 방지와 Rest API추가는 다음에 포스팅.
댓글