SpringBoot 정시 퀘 스 트 설명

7286 단어 springboot
1.정시 퀘 스 트 실현 방식
정시 퀘 스 트 실현 방식:
  • 자바 가 자체 적 으로 가지 고 있 는 자바.util.Timer 류 는 자바.util.Timer Task 작업 을 예약 할 수 있 습 니 다.이런 방식 을 사용 하면 프로그램 이 특정한 빈도 에 따라 실 행 될 수 있 지만 지 정 된 시간 에 실 행 될 수 없다.일반적으로 사용 하 는 것 이 비교적 적 으 니,이 글 은 상세 하 게 소개 하지 않 을 것 이다
  • Quartz 를 사용 합 니 다.이것 은 기능 이 비교적 강 한 스케줄 러 입 니 다.프로그램 이 지 정 된 시간 에 실 행 될 수도 있 고 특정한 빈도 에 따라 실 행 될 수도 있 습 니 다.설정 이 약간 복잡 하고 시간 이 있 으 면 소개 할 수 있 습 니 다
  • SpringBoot 가 자체 적 으로 가지 고 있 는 Scheduled 는 이 를 경량급 의 Quartz 로 볼 수 있 고 사용 하기에 Quartz 보다 훨씬 간단 하 다.본 고 는 주로 소개 한다.
  • 정시 작업 수행 방식:
    단일 스 레 드(직렬)다 중 스 레 드(병렬)2.정시 퀘 스 트 생 성
    
    package com.autonavi.task.test;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import com.autonavi.task.ScheduledTasks;
    
    @Component
    public class ScheduledTest {
    
      private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
    
      @Scheduled(cron="0 0/2 8-20 * * ?") 
      public void executeFileDownLoadTask() {
    
        //   2  ,           
        Thread current = Thread.currentThread(); 
        System.out.println("    1:"+current.getId());
        logger.info("ScheduledTest.executeFileDownLoadTask     1:"+current.getId()+ ",name:"+current.getName());
      }
    
      @Scheduled(cron="0 0/1 8-20 * * ?") 
      public void executeUploadTask() {
    
        //   1  ,               
        Thread current = Thread.currentThread(); 
        System.out.println("    2:"+current.getId());
        logger.info("ScheduledTest.executeUploadTask     2:"+current.getId() + ",name:"+current.getName());
      }
    
      @Scheduled(cron="0 0/3 5-23 * * ?") 
      public void executeUploadBackTask() {
    
        //   3  ,                     
        Thread current = Thread.currentThread(); 
        System.out.println("    3:"+current.getId());
        logger.info("ScheduledTest.executeUploadBackTask     3:"+current.getId()+ ",name:"+current.getName());
      }  
    
    }
    
    
    @Scheduled 주 해 는 이 방법 을 표시 하 는 데 사용 되 는 정시 작업 방법 입 니 다.@Scheduled(cron="...")표현 식 을 사용 하여 정시 작업 을 설정 합 니 다.
    
    //          ,  2      
    @Scheduled(cron="0 0/2 8-20 * * ?") 
    //          ,  3      
    @Scheduled(cron="0 0/3 8-20 * * ?") 
    //          ,  1      
    @Scheduled(cron="0 0/1 8-20 * * ?") 
    3.정시 작업 시작
    
    @ComponentScan
    @EnableAutoConfiguration
    @EnableScheduling
    @Configuration
    public class App {
    
      private static final Logger logger = LoggerFactory.getLogger(App.class);
    
      public static void main(String[] args) {
    
        SpringApplication.run(App.class, args);   
        logger.info("oops");            
      }  
    }
    
    
    그 중에서@Enable Scheduling 주해 의 역할 은 주해@Scheduled 의 임 무 를 발견 하고 배경 에서 수행 하 는 것 입 니 다.
    4.실행 결과
    
    2016-02-14-14-51 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTest.executeUploadBackTask     3:15,name:pool-2-thread-1
           2:15
    2016-02-14-14-51 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTest.executeUploadTask     2:15,name:pool-2-thread-1
           1:15
    2016-02-14-14-52 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTest.executeFileDownLoadTask     1:15,name:pool-2-thread-1
           2:15
    2016-02-14-14-52 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTest.executeUploadTask     2:15,name:pool-2-thread-1
           2:15
    2016-02-14-14-53 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTest.executeUploadTask     2:15,name:pool-2-thread-1
    
    
    5.직렬 작업
    상술 한 방법 은 정시 임 무 를 실현 할 수 있 고 방식 도 비교적 간단 하 다.어떤 파일 을 설정 하지 않 아 도 된다.그러나 한 가지 문 제 를 발견 할 수 있다.즉,정시 임 무 는 몇 개의 class 클래스 에 배정 되 었 든 지 간 에 단일 라인 에서 정시 임 무 를 수행 하 는 것 이다(직렬 임무).
    
    2016-02-14-15-05 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTasks.executeUploadTask     1:15,name:pool-2-thread-1
           2:15
    2016-02-14-15-06 [pool-2-thread-1] [com.autonavi.task.ScheduledTasks] [INFO] - ScheduledTest.executeUploadTask     2:15,name:pool-2-thread-1
    상기 실행 결과 에서 Scheduled Test 와 Scheduled Tasks 는 두 개의 독립 된 클래스 로 각각 정 해진 시간 작업 이 있 지만 실행 할 때 Thread Name 은 같은 pool-2-thread-1 이기 때문에 모든 시간 작업 이 하나의 스 레 드 를 새로 시작 하려 면 스스로 실행 하거나 설정 파일 을 작성 해 야 합 니 다.
    SpringBoot 정시 작업 의 기본 단일 스 레 드,다 중 스 레 드 는 스스로 실행 하거나 파일 을 설정 해 야 합 니 다.
    6.병행 작업
    때로는 서로 다른 업무 의 정시 임 무 를 만 날 수 있 으 므 로 이 럴 때 는 병행 임 무 를 이용 하여 처리 하 는 것 이 타당 하고 다 중 스 레 드 임 무 를 사용 해 야 한다.SpringBoot 설정 파일 만 설정 하 십시오:applicationContext.xml,다음 내용 을 추가 합 니 다.
    
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:task="http://www.springframework.org/schema/task"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="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.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
    
      <!-- Enables the Spring Task @Scheduled programming model -->
      <task:executor id="executor" pool-size="5" />
      <task:scheduler id="scheduler" pool-size="10" />
      <task:annotation-driven executor="executor" scheduler="scheduler" />
    
    </beans>
    
    
    빨간색 상자 의 내용 추가
    这里写图片描述  
    title 에서 누락 된 사이트 주 소 를 보충 하 는 데 도 주의 하 세 요.
    효 과 는 다음 과 같 습 니 다.모든 스케줄 링 은 하나의 작업 을 처리 하고 모든 스케줄 링 도 하나의 하위 스 레 드 입 니 다.
    这里写图片描述  
    executor,scheduler 파라미터 에 대한 소 개 는 이 글 의 34.5 The Task Namespace 절 을 참조 하 십시오.
    7.springboot 기반 정시 작업 프로젝트 사례
    这里写图片描述  
    demo 프로젝트 다운로드 주소
    8.동적 정시 퀘 스 트 설명
    때때로 동적 정시 임 무 를 실현 해 야 한다.즉,공사 가 시 작 된 후에 시작 과 닫 기 임 무 를 실현 할 수 있 고 정시 계획 도 설정 할 수 있다.이것 은 quartz,spring 정부 가 이 가방 아래 의 각종 소개 에 대해 후속 적 으로 시간 을 내 서 이런 업무 의 실현 을 설정 해 야 한다.
    http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/scheduling/quartz/package-summary.html
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기