SpringBoot 세 가지 방식 으로 정시 임 무 를 실현 합 니 다.

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
 
 
 
본문 을 좋아 하 는 친구 들 은 위 챗 공식 번호 인'자바 면접 달인'에 관심 을 가지 고 더 많은 재 미 있 는 내용 을 시청 하 시 는 것 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기