안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)
* 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 * * * *
+ 크론설정 쉽게해주는 사이트를 참고하고자 한다면 => '크론메이커'를 검색하여 참고하면 된다.
'⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆⋆ 。゜☁︎ 。⋆ 。゜☾゜。⋆ > Spring' 카테고리의 다른 글
[Spring] Dispatcher-Servlet이란? 디스패처 서블릿의 개념과 동작 과정 (0) | 2023.08.15 |
---|---|
[Spring] 스프링에서 parameter(요청시 전달값)을 받는 방법 - 로그인 기능 (1) | 2023.08.13 |
[Spring] Model과 ModelAndView 객체로 응답페이지 url재요청 하기 (+ Model과 ModelAndView 차이점 및 개념) (0) | 2023.08.03 |
[Spring] 스프링에서 parameter(요청시 전달값)을 받는 방법(@RequestParam, @ModelAttribute) + 필드, 생성자, 수정자 주입방식 개념 (0) | 2023.08.03 |
[Spring] 스프링 빈(bean)이란? (0) | 2023.08.03 |