회사에서 스케쥴링 구현으로 4시간 동안 삽질해서 알아냈다..
초등학생도 알기 쉽게 차근차근 설명해드림!
(spring 프로젝트를 생성했다는 가정 하에 시작함)
1. 스케쥴러 로직이 들어갈 자리를 만들어주자.
아직 갓 생성한 프로젝트라 들어있는 파일이 거의 없다.
service 패키지에 SchedulerService라는 파일을 생성했다. 내용은 아래와 같다.
package com.tistory.in0pro.service;
import org.springframework.stereotype.Service;
@Service
public class SchedulerService {
public void scheduleRun(){
System.out.println("여기에 로직을 넣으면 된다.");
}
}
어디에 자리를 만들어도 상관 없지만
비즈니스 로직은 대부분 service 영역에서 처리하고 , 스케쥴러는 개수가 늘어날 수 있기 때문에
스케쥴러 전용 service를 따로 만들었다.
이제 자리는 마련이 되었고, spring에 스케쥴러 세팅을 하러 가자.
2. root-context.xml 파일을 연다.
회사 프로젝트에선 root-context가 없었는데, 이럴 경우 대충 비슷한 파일을 찾아주자.
(base-context, context-root 등...)
이때, 파일이 어디 있는지 모르겠다면 ctrl+shift+R 을 누르고 *context를 검색하자. (아래 이미지 참고)
아무것도 건드리지 않은 프로젝트라면 아래와 비슷한 상태일 것이다.
3. root-context에 cron 세팅 코드를 넣어주자.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<bean id="careerAlarmService" class="com.tistory.in0pro.service.SchedulerService" />
<task:scheduler id="gsScheduler" pool-size="10" />
<task:executor id="gsTaskExecutor" pool-size="10" />
<task:annotation-driven executor="gsTaskExecutor"
scheduler="gsScheduler" />
<!-- Root Context: defines shared resources visible to all other web components -->
</beans>
(복사하기 편하게 코드 블록에 한번 더 썼다)
class="com.tistory.in0pro.service.SchedulerService" 부분에 아까 만들어둔 자리(파일)를 넣으면 된다.
4. 만들어둔 자리에 스케쥴러를 적용하자.
package com.tistory.in0pro.service;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class SchedulerService {
@Scheduled(cron="*/30 * * * * *")
public void scheduleRun(){
System.out.println("성공~");
}
}
이렇게 두 라인만 추가하면 된다.
cron=""에 들어갈 내용은 구글에 'spring cron'이라고 검색하면 잘 정리된 게시글이 많다.
참고로 "*/30 * * * * *"는 30초에 한 번씩 실행한다는 뜻이다.
나는 자동 메일링을 위해 스케쥴러를 사용했는데, 매일 아침 8시에 데이터를 처리하기 위해 cron="0 0 8 * * *"로 돌렸다.
서버를 실행하면 잘 동작하는 것을 확인할 수 있다.
'Programming > Java' 카테고리의 다른 글
[Java] java로 구현한 코드 bat 스케쥴링 (0) | 2022.03.07 |
---|---|
[Spring] 한글 깨질때, UTF-8 설정 (0) | 2021.06.07 |
[우아한테크코스 3기 프리코스 3주차] 블랙잭 (0) | 2019.12.17 |
[우아한테크코스 3기 프리코스 2주차] 자동차 경주 게임 (0) | 2019.12.08 |
[우아한테크코스 3기 프리코스 1주차] 숫자 야구 게임 (0) | 2019.12.06 |
댓글