spring 동적 정시 작업
3598 단어 spring
1.schedule(Runnable task,Date stateTime),지 정 된 시간 에 한 번 의 정시 작업 수행
2.schedule(Runnable task,Trigger trigger),지정 한 표현 식 cron 을 동적 으로 만 드 는 정시 작업
3.scheduleAtFixed Rate(Runnable task,Date startTime,long period),지 정 된 시간 부터 지 정 된 간격(밀리초 단위)으로 한 번 의 작업 을 수행 합 니 다.간격 은 이전 실행 부터 다음 작업 시작 시간 까지 입 니 다.
4. scheduleAtFixed Rate(Runnable task,long period),지금부터 지정 한 간격(밀리초 단위)으로 작업 을 수행 합 니 다.간격 은 이전 실행 부터 다음 작업 시작 시간 까지 입 니 다.
5.schedule With FixedDelay(Runnable task,Date startTime,long delay)는 지 정 된 시간 부터 지 정 된 간격(밀리초 단위)으로 한 번 의 임 무 를 수행 하 며,간격 은 이전 수행 완료 에서 다음 작업 시작 시간 까지 입 니 다.
6.schedule With Fixed Delay(Runnable task,Duration delay),지금부터 지 정 된 간격(밀리초 단위)으로 한 번 의 작업 을 수행 합 니 다.다음 작업 시작 시간 까지 간격 을 두 고 다음 작업 을 수행 합 니 다.
schedule(Runnable task,Trigger trigger)을 사용 하여 cron 표현 식 으로 작업 을 발표 합 니 다.
우선 Thread PoolTask Scheduler 를 bean 으로 spring 에 주입 합 니 다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* bean
* @author: yuhh
* @create: 2019-06-25 13:50
**/
@Configuration
public class BeanConfig {
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
//
executor.setPoolSize(Runtime.getRuntime().availableProcessors());
//
executor.setThreadNamePrefix("charge-task-Executor-");
// Bean
executor.setWaitForTasksToCompleteOnShutdown(true);
// , , ,
executor.setAwaitTerminationSeconds(60);
return executor;
}
}
그 다음 에 정시 작업 클래스 에 Thread PoolTask Scheduler 를 주입 합 니 다.정시 작업 을 한 번 수행 한 후에 닫 으 려 면 모든 정시 작업 의 Future 를 저장 하 는 map 가 필요 합 니 다.Future 는 스 레 드 를 닫 을 수 있 습 니 다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
/**
*
* @author: yuhh
* @create: 2019-05-13 11:39
**/
@Component
public class SchedulingTask {
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
/**
* ,
*/
private Map futureMap = new HashMap<>();
/**
*
* @author yuhh
* @date 2019/5/13 14:39
*/
@Scheduled(cron = "0 10 0 * * ?")
public void settleAccounts(){
futureMap.put(
mapKey,
threadPoolTaskScheduler.schedule(
new MyRunnable(),
new CronTrigger(cron )
)
)
}
/**
* --
*/
private class MyRunnable implements Runnable {
@Override
public void run() {
//
todo
//
ScheduledFuture future = futureMap.get(mapKey);
future.cancel(true);
}
}
}
상기 코드 는 주어진 cron 표현 식 의 동적 설정 에 따라 시간 임 무 를 설정 하고 실행 이 끝 난 후에 이 시간 임 무 를 닫 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.