-
创建一个 Spring Boot 應用程式並添加依賴項
首先,創建一個 Spring Boot 應用程式並將以下依賴項添加到 build.gradle 或 pom.xml 文件中:
dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-task' implementation 'org.springframework.cloud:spring-cloud-starter-scheduler' // 其他依賴項 }
-
編寫 TaskLauncher 類
接下來,您需要編寫一個 TaskLauncher 類,它負責啟動和停止任務。這個類可以使用 Spring Cloud Task 提供的 TaskLauncher 介面來實現,如下所示:
import org.springframework.cloud.task.launcher.TaskLaunchRequest; import org.springframework.cloud.task.launcher.TaskLauncher; public class MyTaskLauncher { private final TaskLauncher taskLauncher; public MyTaskLauncher(TaskLauncher taskLauncher) { this.taskLauncher = taskLauncher; } public void launchTask(String taskName, String commandLineArgs) { TaskLaunchRequest request = new TaskLaunchRequest( "classpath:/tasks/" + taskName + ".jar", commandLineArgs, null, null, null); taskLauncher.launch(request); } public void stopTask(long taskId) { taskLauncher.stop(taskId); } }
在這個例子中,MyTaskLauncher 類包含了 launchTask () 方法和 stopTask () 方法。launchTask () 方法將根據傳入的任務名稱和命令行參數啟動一個新的任務,並返回任務 ID。stopTask () 方法將停止指定的任務。
-
編寫 TaskScheduler 類
接下來,您需要編寫一個 TaskScheduler 類,它將負責安排任務並將其發送到 TaskLauncher 進行執行。您可以使用 Spring Cloud Scheduler 提供的 ScheduledTaskRegistrar 和 ScheduledTask 類來實現這個類,如下所示:
import org.springframework.cloud.scheduler.ScheduledTask; import org.springframework.cloud.scheduler.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; public class MyTaskScheduler { private final ScheduledTaskRegistrar taskRegistrar; private final MyTaskLauncher taskLauncher; public MyTaskScheduler(ScheduledTaskRegistrar taskRegistrar, MyTaskLauncher taskLauncher) { this.taskRegistrar = taskRegistrar; this.taskLauncher = taskLauncher; } public void scheduleTask(String taskName, String cronExpression, String commandLineArgs) { ScheduledTask task = taskRegistrar.scheduleCronTask(() -> { taskLauncher.launchTask(taskName, commandLineArgs); }, new CronTrigger(cronExpression)); task.getTaskId(); // 可選:保存任務ID以便稍後停止任務 } public void unscheduleTask(long taskId) { taskRegistrar.removeScheduledTask(taskId); taskLauncher.stopTask(taskId); } }
在這個例子中,MyTaskScheduler 類包括了 scheduleTask () 方法和 unscheduleTask () 方法。scheduleTask () 方法將安排一個新的任務,該任務將在指定的 cron 表達式觸發時執行。unscheduleTask () 方法將取消該任務的調度並停止該任務的運行(如果正在運行)。
-
定義和註冊任務
現在,您可以定義和註冊要執行的任務。這些任務可以是普通的 Java 類,也可以是 Spring Batch 作業或其他類型的任務。在此示例中,我們將創建一個簡單的 Java 類來表示一個任務:
public class MyTask implements Runnable { private final String name; public MyTask(String name) { this.name = name; } @Override public void run() { System.out.println("Running task " + name); } }
然後,您可以通過創建 MyTask 實例並將其傳遞給 MyTaskScheduler 的 scheduleTask () 方法來註冊任務,如下所示:
@Autowired private MyTaskScheduler taskScheduler; @PostConstruct public void init() { taskScheduler.scheduleTask("my-task", "0 0/5 * * * ?", "arg1 arg2"); }
在這個例子中,我們使用了 @PostConstruct 註解來確保任務在應用程式啟動時自動註冊和調度。
-
啟動應用程式
最後,您可以啟動應用程式