Programming/Java

[Spring] cron으로 스케쥴링 구현하기 (쉽고 자세한 설명)

IN.0 2021. 6. 8. 23:02
728x90
반응형

회사에서 스케쥴링 구현으로 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 * * *"로 돌렸다.

성공~

서버를 실행하면 잘 동작하는 것을 확인할 수 있다.

 

728x90
반응형