SpringBoot 세 가지 방식 으로 정시 임 무 를 실현 합 니 다.
Timer:이것 은 자바 가 자체 적 으로 가지 고 있 는 자바 util.Timer 류 입 니 다.이 종 류 는 자바 util.Timer Task 작업 을 예약 할 수 있 습 니 다.이런 방식 을 사용 하면 프로그램 이 특정한 빈도 에 따라 실 행 될 수 있 지만 지 정 된 시간 에 실 행 될 수 없다.일반적으로 쓰 는 것 이 비교적 적다.
Scheduled Executor Service:jdk 자체 가 가지 고 있 는 클래스 입 니 다.스 레 드 탱크 디자인 을 바탕 으로 하 는 정시 작업 류 로 모든 스 케 쥴 러 임 무 는 스 레 드 탱크 의 한 스 레 드 에 배정 되 어 실 행 됩 니 다.즉,임 무 는 동시에 수행 되 고 서로 영향 을 주지 않 습 니 다.
Spring Task:Spring 3.0 이후 자체 적 으로 가지 고 있 는 task 는 경량급 Quartz 로 볼 수 있 으 며,사용 하기에 Quartz 보다 훨씬 간단 하 다.
타이머 사용
이것 은 현재 프로젝트 에 사용 되 는 것 이 비교적 적 고 데모 코드 를 직접 붙 입 니 다.구체 적 인 소 개 는 api 를 볼 수 있 습 니 다.
public class TestTimer {
public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("task run:"+ new Date());
}
};
Timer timer = new Timer();
// 。 3
timer.schedule(timerTask,10,3000);
}
}
ScheduledExecutorService 사용 하기
이 방법 은 Timer 와 유사 합 니 다.demo 를 직접 보 세 요.
public class TestScheduledExecutorService {
public static void main(String[] args) {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// :1、 2、
// 3、 4、
service.scheduleAtFixedRate(()->System.out.println("task ScheduledExecutorService "+new Date()), 0, 3, TimeUnit.SECONDS);
}
}
Spring Task 사용 하기
1.간단 한 정시 작업 은 SpringBoot 프로젝트 에서 우 리 는 주 해 를 우아 하 게 사용 하여 정시 작업 을 실현 할 수 있 습 니 다.먼저 프로젝트 를 만 들 고 의존 도 를 가 져 올 수 있 습 니 다.
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
작업 클래스 생 성:
@Slf4j
@Component
public class ScheduledService {
@Scheduled(cron = "0/5 * * * * *")
public void scheduled(){
log.info("=====>>>>> cron {}",System.currentTimeMillis());
}
@Scheduled(fixedRate = 5000)
public void scheduled1() {
log.info("=====>>>>> fixedRate{}", System.currentTimeMillis());
}
@Scheduled(fixedDelay = 5000)
public void scheduled2() {
log.info("=====>>>>>fixedDelay{}",System.currentTimeMillis());
}
}
주 클래스 에서@Enable Scheduling 주 해 를 사용 하여 정시 작업 에 대한 지원 을 시작 한 다음 에 프로젝트 를 시작 하면 세 개의 정시 작업 이 모두 실 행 된 것 을 볼 수 있 고 같은 스 레 드 에서 직렬 로 실 행 될 수 있 습 니 다.만약 에 하나의 정시 작업 만 있 으 면 문제 가 없 을 것 입 니 다.정시 작업 이 증가 하면 하나의 작업 이 카드 로 죽 으 면 다른 작업 도 수행 할 수 없습니다.
2.다 중 스 레 드 는 전통 적 인 Spring 프로젝트 에서 실 행 됩 니 다.xml 설정 파일 에 task 설정 을 추가 할 수 있 습 니 다.SpringBoot 프로젝트 에 서 는 일반적으로 config 설정 류 를 사용 하여 설정 을 추가 할 수 있 기 때문에 AsyncConfig 류 를 새로 만 듭 니 다.
@Configuration
@EnableAsync
public class AsyncConfig {
/*
@Value
*/
private int corePoolSize = 10;
private int maxPoolSize = 200;
private int queueCapacity = 10;
@Bean
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.initialize();
return executor;
}
}
@Configuration:이 클래스 가 설정 클래스 임 을 표시 합 니 다@EnableAsync:비동기 이벤트 지원 열기
그리고 정시 작업 의 클래스 나 방법 에@Async 를 추가 합 니 다.마지막 으로 항목 을 다시 시작 합 니 다.모든 작업 은 다른 스 레 드 에 있 습 니 다.
온라인 cron 표현 식 생 성:http://qqe2.com/cron/index
본문 을 좋아 하 는 친구 들 은 위 챗 공식 번호 인'자바 면접 달인'에 관심 을 가지 고 더 많은 재 미 있 는 내용 을 시청 하 시 는 것 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.