본문 바로가기
Programming/Java

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

by IN.0 2021. 6. 8.
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
반응형

댓글