-
创建一个 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 注解来确保任务在应用程序启动时自动注册和调度。
-
启动应用程序
最后,您可以启动应用程序