SpringBoot 정시 퀘 스 트 설명
정시 퀘 스 트 실현 방식:
단일 스 레 드(직렬)다 중 스 레 드(병렬)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 。
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.