[英]Springboot: start a and stop programmatically a scheduled task
您可以通過org.springframework.scheduling.TaskScheduler
以編程方式安排任務。
例如
@Autowired
private TaskScheduler taskScheduler;
void scheduleTask(){
final int xSeconds = 2000;
PeriodicTrigger periodicTrigger = new PeriodicTrigger(xSeconds, TimeUnit.SECONDS);
taskScheduler.schedule(
() -> System.out.println("task B"),
periodicTrigger
);
}
這篇文章也很有幫助。
您可以將fixedRate
與initialDelay
注釋結合使用。 因此 taskB 在 6100 毫秒的初始延遲后運行。
A --------- B ----- A -------- B ----- A ------>
t(0) t(5900) t(6000) t(1900) t(12000)
@Scheduled(fixedRate = 6000)
private void taskA(){
System.out.println("A");
}
@Scheduled(fixedRate = 6000, initialDelay = 5000)
private void taskB(){
System.out.println("B");
}
@Scheduled
注釋適用於永遠運行的東西。 將TaskScheduler
用於必須停止的任務,將@Scheduled
用於在您停止服務之前應該運行的任務。
這是一些代碼:
@Component
@RequiredArgsConstructor
public class Blam
implements
Runnable
{
private int count = 0;
private ScheduledFuture<?> scheduledFuture = null;
private final TaskScheduler taskScheduler;
@Override
public void run()
{
if (count < 6)
{
System.out.printf("%d: blam.taskA\n", count);
++count;
}
else
{
scheduledFuture.cancel(true);
}
}
@PostConstruct
public void postConstruct()
{
scheduledFuture = taskScheduler.scheduleWithFixedDelay(this, 1000);
}
}
@Component
public class Kapow
{
@Scheduled(initialDelay = 6000, fixedDelay = 1000)
public void taskB()
{
System.out.println("Kapow.taskB");
}
}
@RequiredArgsConstructor
是一個 Lombok 注釋,我強烈推薦使用 Lombok。 如果您不使用 Lombok,只需根據您的選擇注入TashScheduler
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.