Spring Task 정시 작업 구성 및 사용 상세 정보

7159 단어 springtask
Spring이 자체적으로 가지고 있는 정시 작업 사용법을 기록합니다.
스프링에서 시간 작업 사용하기
xml 프로필 기반 시간 작업 사용
우선spring 오픈 시간 작업 설정

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns:p="http://www.springframework.org/schema/p" 
  xmlns:task="http://www.springframework.org/schema/task" 
  xmlns:context="http://www.springframework.org/schema/context" 
  xmlns:aop="http://www.springframework.org/schema/aop"  
  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd"> 

  <task:annotation-driven /> <!--  --> 

  <bean id="myTask" class="com.spring.task.MyTask"></bean> 

  <task:scheduled-tasks> 
    <!--   --> 
    <task:scheduled ref="myTask" method="show" cron="*/5 * * * * ?" /> 
    <task:scheduled ref="myTask" method="print" cron="*/10 * * * * ?"/> 
  </task:scheduled-tasks> 

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

</beans>
자신의 작업 수행 논리 정의

package com.spring.task; 

/** 
 *   
 */ 
public class MyTask { 

  public void show() { 
    System.out.println("show method 1"); 
  } 

  public void print() { 
    System.out.println("print method 1"); 
  } 
}
메모 기반 시간 작업 사용

package com.spring.task; 
import org.springframework.scheduling.annotation.Scheduled; 
import org.springframework.stereotype.Component; 

/**
 *   
 */
@Component
public class MyTask2 { 

  /**
   *  。  01:00  
   */
  @Scheduled(cron = "0 0 1 * * *")
  public void show() {
    System.out.println("show method 2"); 
  } 

  /**
   *  , 2  
   */
  @Scheduled(fixedRate = 1000*2)  
  public void print() { 
    System.out.println("print method 2");
  }
}

이렇게 하면 프로젝트가 시작되면 정시 임무는 규칙에 따라 제때에 집행된다.
Spring Boot에서 정시 작업 사용
Spring Boot에서 사용하기 편리합니다.
도입springboot starter 패키지

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
</dependency>
프로그램 입구 시작 클래스에 추가@EnableScheduling, 정시 작업 기능 오픈

@SpringBootApplication
@EnableScheduling
public class Application {

 public static void main(String[] args) {
   SpringApplication.run(Application.class, args);
 }
정시 작업 논리 정의

@Component
public class MyTask3 {

 private int count=0;

 @Scheduled(cron="*/6 * * * * ?")
 private void process() {
   System.out.println("this is scheduler task runing "+(count++));
 }
}

작업 수행 규칙 설명
먼저 @Scheduled 주석의 원본 코드를 보겠습니다.

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {

  String cron() default "";

  String zone() default "";

  long fixedDelay() default -1;

  String fixedDelayString() default "";

  long fixedRate() default -1;

  String fixedRateString() default "";

  long initialDelay() default -1;

  String initialDelayString() default "";
}

메모에서 8가지 매개변수를 전달할 수 있습니다.
  • cron:cron 표현식 지정
  • zone: 기본적으로 서버 기본 시간대를 사용합니다.java.util.TimeZone의 zoneId
  • 로 설정할 수 있습니다.
  • fixedDelay: 이전 작업 완료 시점부터 다음 작업 시작 시점까지 밀리초
  • fixedDelayString: 동일, 시간값은 String 유형
  • fixedRate: 이전 작업부터 다음 작업까지 밀리초 간격
  • fixedRateString: 동일, 시간 값은 String 유형
  • initial Delay: 작업이 처음 수행되는 지연 시간, 밀리초 단위
  • initial DelayString: 동일, 시간 값은 String 유형입니다.
  • cron 표현식의 사용 방법
    Cron 표현식은 문자열로 문자열은 5 또는 6개의 공백으로 구분되며 6 또는 7개의 도메인으로 구분되며 각 도메인은 다음 두 가지 구문 형식을 갖습니다.
  • Seconds Minutes Hours DayofMonth Month DayofWeek Year
  • Seconds Minutes Hours DayofMonth Month DayofWeek
  • 각 도메인에 나타날 수 있는 문자는 다음과 같습니다.
  • Seconds: ",-*/"네 글자, 유효 범위 0-59 정수
  • Minutes: 유효한 범위가 0-59인 정수
  • Hours: ",-*/"네 글자, 유효 범위 0-23의 정수
  • DayofMonth: 유효한 범위가 0-31인 정수
  • - ",*/?L W C"8자가 나타날 수 있습니다.
  • Month: 유효한 범위가 1-12인 정수 또는 JAN-DEC
  • 인 ",-*/"네 글자가 나타날 수 있습니다.
  • DayofWeek: 1-7의 정수 또는 SUN-SAT 두 개 범위에서 유효한 ",-*/?L C#"네 글자가 나타날 수 있습니다.1은 일요일, 2는 월요일, 순서대로 유추
  • Year: ",-*/"네 글자가 나타날 수 있으며 유효한 범위는 1970-20099년입니다.
  • 각 도메인은 숫자를 사용하지만 다음과 같은 특수 문자가 나타날 수 있습니다.
  • *: 이 도메인과 일치하는 임의의 값을 나타냅니다. Minutes 도메인에서 *를 사용하면 분당 이벤트가 발생합니다.
  • ?: Day ofMonth와 Day ofWeek 두 도메인에서만 사용할 수 있습니다.그것 또한 영역의 임의의 값과 일치하지만, 실제로는 그렇지 않습니다.Day of Month와 Day of Week가 서로 영향을 미치기 때문입니다.예를 들어 매달 20일에 스케줄링을 터치하려면 20일이 도대체 무슨 요일이든지 간에 다음과 같은 글만 사용할 수 있다. 13 13 15 20?,그중 마지막 분만 쓸 수 있다고요?사용할 수 없습니다. *를 사용하면 요일에 상관없이 촉발된다는 뜻입니다. 실제로는 그렇지 않습니다.
  • -: 범위를 나타냅니다. 예를 들어 Minutes 영역에서 5-20을 사용하면 5분에서 20분에 한 번씩 촉발됩니다.
  • /: 시작 시간부터 트리거하고 고정 시간마다 트리거하는 것을 나타낸다. 예를 들어 Minutes역에서 5/20을 사용하면 5분에 한 번, 25, 45 등은 각각 한 번 트리거하는 것을 의미한다.
  • ,: 열거된 값을 나타냅니다.예를 들어 Minutes 영역에서 5, 20을 사용하면 5분과 20분에 한 번씩 터치하는 것을 의미한다.
  • L: 마지막으로 Day ofWeek와 Day ofMonth 도메인에만 나타날 수 있음을 나타냅니다. 만약에 Day ofWeek 도메인에서 5L을 사용한다면 마지막 목요일에 촉발된다는 것을 의미합니다.
  • W: 유효한 근무일(월요일부터 금요일까지)을 나타내며 Day ofMonth 도메인에만 표시되며 지정된 날짜와 가장 가까운 유효한 근무일에만 이벤트가 발생합니다.예를 들어 Day ofMonth에서 5W를 사용하고 5일이 토요일이면 가장 가까운 근무일인 금요일, 즉 4일에 터치합니다.만약 5일이 일요일이라면 6일(월)에 촉발한다.만약 5일이 월요일에서 금요일 중 하루라면, 5일에 촉발된다.또 하나는 W의 최근 찾기가 달을 넘지 않는다는 점이다.
  • LW: 이 두 문자는 연결할 수 있으며 어느 달의 마지막 근무일, 즉 마지막 금요일을 나타낸다.
  • #: 매달 몇 번째 요일을 결정하는 데 사용되며 DayofMonth 도메인에만 표시됩니다.예를 들어 4#2는 어느 달의 두 번째 수요일을 나타낸다.
  • 이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기