반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[spring] spring scheduler 스프링 스케줄러란? (스프링 스케줄러 작업순서) 본문

⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆/Spring

[spring] spring scheduler 스프링 스케줄러란? (스프링 스케줄러 작업순서)

yeonee 여니 2023. 8. 9. 19:09
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

yeonee 블로그 : 네이버 블로그

예쁘고 맛있게 먹고 건강하게,강인하지만 온화하게 행하라. ※맛스타운스타일상 인스타 www.instagram.com/s2._.y25n ※맛집감성일상 유튜브https://youtube.com/channel/@S2_yeonee 티스토리https://yeoneeluv.tistory.co

blog.naver.com

 

 

* spring scheduler?

매일, 매분, 매초, 매주, 매달 반복적으로 실행시켜야하는 프로세스가 있는경우
스프링 스케줄러를 사용하면 간편하게 셋팅이 가능하다.


 

* 스프링 스케줄러 작업순서

1. task, context 스키마와 스키마로케이션 등록 => namespaces에서 등록함.
2. annotation활성화
3. 스케줄러로 사용할 클래스를 빈으로 등록.
4. web.xml에 프로그램 구동시 필요한 scheduler-context.xml을 등록 => *-context.xml로 등록
========================
5. 스케줄링을 원하는 메서드에 가서 schedule어노테이션 추가하기
6. 원하는 스케쥴링 방식 정의하기


아래의 활용예시 코드를 통해 스프링 스케줄러 작업순서를 익혀보자.

 

<SchedulerController.java>

public class SchedulerController {


	//@Scheduled(fixedDelay = 1000)//고정방식 //;서버가 켜지자마자 1m/s로 실행됨
	
    public void test() {
		log.info("1초마다 출력");
	}

	public void testCron() {
		log.info("크론탭 방식 테스트 ");
	}
	
}

 

<scheduler-context.xml>

<?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:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
    <!-- 
		spring scheduler?
			매일, 매분, 매초, 매주, 매달 반복적으로 실행시켜야하는 프로세스가 있는경우
			스프링 스케줄러를 사용하면 간편하게 셋팅이 가능하다
	 -->

	<!-- 
		스프링 스케줄러 작업순서
		1. task, context 스키마와 스키마로케이션 등록 => namespaces에서 등록함.
		2. annotation활성화
		3. 스케줄러로 사용할 클래스를 빈으로 등록.
		4. web.xml에 프로그램 구동시 필요한 scheduler-context.xml을 등록 => *-context.xml로 등록
	 	========================
	 	5. 스케줄링을 원하는 메서드에 가서 schedule어노테이션 추가하기
	 	6. 원하는 스케쥴링 방식 정의하기
	 -->
	 
	 <!-- #3 -->
	 <context:component-scan base-package="com.kh.spring"></context:component-scan>
	 
	 <!-- #2 -->
	 <task:annotation-driven scheduler="khScheduler"/>
	 
	 <task:scheduler id="khScheduler" pool-size="10"/>
	 <!-- 
	 	pool-size :: 쓰레드풀 개수 지정. 미지정시 기본값 1
	 	메인스레드에 영향을 끼치지 않게하기 위해서 선언.
	  -->
	 
	 <task:scheduled-tasks scheduler="khScheduler">
		<!-- 
			ref : 빈클래스이름을 작성
			method : 해당빈클래스에서 스케줄링할 메서드명
			cron : 
					* * * * * * * 
					초 분 시 일 월 요일 '년도'(생략가능)
					
				☆	* : 모든 값(매시, 매분, 매주, 매초)
					? : 어떤값이든 상관없다
				☆	- : 범위를 지정 24-25
				☆	, : 여러값을지정할때 1,5
					/ : 증분값, 0/2 -> 0초, 2는 증가치 0초부터 2초단위로 실행
					L : 지정할 수 있는 범위의 마지막값 표시
					W : 가장 가까운 평일을 설정할때
					# : N번째 특정요일을 설정할때
					
					매일 오전 1시에 실행되게끔하고 싶다.
					0 0 1 * * *
					매일 30분마다 실행되게끔 하고 싶다
					0 30 * * * *
					
					크론설정 쉽게해주는 사이트 => 크론메이커
		 -->	 
	 	<task:scheduled ref="SchedulerController" method="testCron" cron="1 * * * * *" />
	 
	 </task:scheduled-tasks>
	 
	 
	 
</beans>

 

1. task, context 스키마와 스키마로케이션 등록 => namespaces에서 등록하는 Namespaces에서 'context'와 'task'를 체크하면 자동으로 Source의 상단에 추가된다.

xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

 

2. annotation활성화는 아래의 코드를 scheduler-context.xml에 입력해준다.

<task:annotation-driven scheduler="khScheduler"/>

 

3. 스케줄러로 사용할 클래스를 빈으로 등록 과정은 아래의 코드를 scheduler-context.xml에 입력해준다.

<context:component-scan base-package="com.kh.spring"></context:component-scan>

 

4. web.xml에 프로그램 구동시 필요한 scheduler-context.xml을 등록하는 과정은
    web.xml에 *-context.xml로 등록해준다.

<!-- web application context -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <!-- security-context 설정파일 추가! -->
    <param-value>
        /WEB-INF/spring/*-context.xml
        <!-- /WEB-INF/spring/root-context.xml
        /WEB-INF/spring/security-context.xml -->
    </param-value>
</context-param>

 

5. 스케줄링을 원하는 메서드에 가서 schedule어노테이션 추가하기

public class SchedulerController {


	//@Scheduled(fixedDelay = 1000)//고정방식 //;서버가 켜지자마자 1m/s로 실행됨
	
    public void test() {
		log.info("1초마다 출력");
	}

	public void testCron() {
		log.info("크론탭 방식 테스트 ");
	}
	
}

 


6. 원하는 스케쥴링 방식 정의하기

<scheduler-context.xml>

<task:scheduler id="khScheduler" pool-size="10"/>
 <!-- 
    pool-size :: 쓰레드풀 개수 지정. 미지정시 기본값 1
    메인스레드에 영향을 끼치지 않게하기 위해서 선언.
  -->

 <task:scheduled-tasks scheduler="khScheduler">
    <!-- 
        ref : 빈클래스이름을 작성
        method : 해당빈클래스에서 스케줄링할 메서드명
        cron : 
                * * * * * * * 
                초 분 시 일 월 요일 '년도'(생략가능)

            ☆	* : 모든 값(매시, 매분, 매주, 매초)
                ? : 어떤값이든 상관없다
            ☆	- : 범위를 지정 24-25
            ☆	, : 여러값을지정할때 1,5
                / : 증분값, 0/2 -> 0초, 2는 증가치 0초부터 2초단위로 실행
                L : 지정할 수 있는 범위의 마지막값 표시
                W : 가장 가까운 평일을 설정할때
                # : N번째 특정요일을 설정할때

                매일 오전 1시에 실행되게끔하고 싶다.
                0 0 1 * * *
                매일 30분마다 실행되게끔 하고 싶다
                0 30 * * * *

                크론설정 쉽게해주는 사이트 => 크론메이커
     -->	 
    <task:scheduled ref="memberController" method="testCron" cron="1 * * * * *" />

 </task:scheduled-tasks>

 

* pool-size ?
쓰레드풀 개수 지정. 미지정시 기본값은 1이다.
메인스레드에 영향을 끼치지 않게 하기 위해서 선언한다.

 

* ref : 빈클래스이름을 작성
* method : 해당빈클래스에서 스케줄링할 메서드명
* cron : * * * * * * * 
            초 분 시 일 월 요일 '년도'(생략가능)


(☆ 더 자주 쓰이는 것)

☆  * : 모든 값(매시, 매분, 매주, 매초)
     ? : 어떤값이든 상관없다
☆  - : 범위를 지정 24-25
☆  , : 여러값을지정할때 1,5
      / : 증분값, 0/2 -> 0초, 2는 증가치 0초부터 2초단위로 실행
      L : 지정할 수 있는 범위의 마지막값 표시
      W : 가장 가까운 평일을 설정할때
       # : N번째 특정요일을 설정할때

ex)
매일 오전 1시에 실행되게끔하고 싶다.
0 0 1 * * *

매일 30분마다 실행되게끔 하고 싶다
0 30 * * * *


+ 크론설정 쉽게해주는 사이트를 참고하고자 한다면  =>  '크론메이커'를 검색하여 참고하면 된다.

728x90
반응형
LIST