erosynthesis

erosynthesis

Spring Cloud TaskとSpring Cloud Schedulerを使用して、分散型の定期タスクを実現します。

  1. 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'
        // その他の依存関係
    }
    
  2. 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 () メソッドは、指定されたタスクを停止します。

  3. 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 () メソッドは、そのタスクのスケジュールをキャンセルし、実行中の場合はタスクの実行を停止します。

  4. タスクの定義と登録

    これで、実行するタスクを定義して登録することができます。これらのタスクは、通常の 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 アノテーションを使用して、タスクがアプリケーションの起動時に自動的に登録およびスケジュールされるようにします。

  5. アプリケーションの起動

    最後に、アプリケーションを起動できます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。