SpringBootはXxl-jobを統合して、スケジュールされたタスクを実現します

SpringBootはXxl-jobを統合して、スケジュールされたタスクを実現します


XXL-JOBは分散タスクスケジューリングプラットフォームであり、そのコア設計目標は、迅速な開発、簡単な学習、軽量、および簡単な拡張です。現在、オープンソースであり、箱から出してすぐに多くの企業のオンライン製品ラインに接続されています。

単一のマシンであり、時限タスクが多くない場合は、Timerアノテーション@ScheduledまたはCron工具类他の方法を選択してそれを実現できますが、これには欠点があります。つまり、時限タスクがコードに書き込まれ、開始されると、一時停止または変更することはできません。変更した場合は、プロジェクト全体を再コンパイルする必要があり、非常に面倒です。

この記事では、xxl-jobを介してタスクスケジューリングを実装する方法を紹介します

1.展開ディスパッチセンター

1.プロジェクトのダウンロード

以下は、ローカルに植民地化できるディスパッチセンターコードのgiteeアドレスです。

http://gitee.com/xuxueli0323/xxl-job

2.データを初期化します

ダウンロードしたプロジェクトのディレクトリにファイルdoc/dbがあります。tables_xxl_job.sqlまずそれを自分のデータベースに入れて実行します。実際には、スケジューリングセンターに必要なテーブル構造とデータを初期化することです。

3.プロパティ構成ファイルを変更します

複製されたプロジェクトをIDEで開き、xxl-job-adminモジュールの下のプロパティ構成ファイルを変更します。接続データベースのURL、ユーザー名、およびパスワードを自分のものに変更するだけで済みます。変更後、xxl-job-adminディスパッチセンターを起動できます。次に、http:// localhost:8080 / xxl-job-admin /を開いて、コントロールパネルを表示します。

画像の説明を追加してください

次に、SpringBootプロジェクトをデプロイします

1.依存関係を導入する

<dependency>
	<groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.2.0</version>
</dependency>

2.構成クラスを作成します

@Configuration
public class XxlJobConfig {
    
    
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
    
    
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}

3.構成ファイルを変更します

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin #部署的调度中心的url
    executor:
      appname: xxl-job-volunteer-executor #执行器的名字
      ip:
      port: 9999 #调度中心调用执行器时使用的端口
      logpath: /data/apploggs/xxl-job/jobhandler #日志路径
      logretentiondays: 30 #日志保留天数
    accessToken:

4.エグゼキュータを作成します

@Component
public class XxlJobSample {
    
    

    // myDemoJob是任务的名字,也是Spring中bean的名字
    @XxlJob("myDemoJob")
    public ReturnT<String> myDemoJob(String value) {
    
    
        System.out.println("myDemoJob:定时任务触发:" + value);
        return ReturnT.SUCCESS;
    }
    
}

5.SpringBootプロジェクトを開始します

起動が成功すると、次の2行のログ情報が表示されます。スケジューリングセンターに正常に接続し、スケジュールするタスクを登録したことがわかります。

 >>>>>>>>>>> xxl-job register jobhandler success, name:myDemoJob, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob]
 
 >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999

3.スケジューリングセンターを介したタスクスケジューリング

1.エグゼキュータを追加します

画像の説明を追加してください

構成ファイルで構成されたappNameを入力します。名前は任意にすることができます

画像の説明を追加してください

2.タスクを追加します

スケジューリングタスクを追加する

画像の説明を追加してください

画像の説明を追加してください

スケジュールされたタスクを表示する

画像の説明を追加してください

3.タスクスケジューリングセンターがタスクスケジューリングを開始します

画像の説明を追加してください

SpringBootプロジェクトでは、コンソールが次の情報を出力するのを確認できます。

2022-01-16 11:54:05.039  INFO 7836 --- [Pool-1148366645] c.xxl.job.core.executor.XxlJobExecutor   : >>>>>>>>>>> xxl-job regist JobThread success, jobId:7, handler:com.xxl.job.core.handler.impl.MethodJobHandler@1f94dd63[class com.volunteer.component.XxlJobSample#myDemoJob]
myDemoJob:定时任务触发:testParam
2022-01-16 11:55:38.059  INFO 7836 --- [      Thread-22] com.xxl.job.core.thread.JobThread        : >>>>>>>>>>> xxl-job JobThread stoped, hashCode:Thread[Thread-22,10,main]

4.まとめ

これまでのところ、SpringBootによるXxl-jobの統合は完了しています。現在のサンプルコードは、実際には元のプロジェクトに非常に煩わしいものです。上記はBEAN実行モードを示しているだけです。率直に言って、added@XxlJobメソッドを呼び出します。実際、タスクを作成するときにこの実行モードを使用することもできますGLUE(Java)。このメソッドは、実際に入力したJavaコードを実行します。このメソッドは、元のプロジェクトに依存関係や構成を追加する必要はありません。スケジュールされたタスクの場合、必要なのはトリガーするインターフェイスを作成するとGLUE(Java)、タスクは定期的に公開されたインターフェイスを要求します

コードスニペットは次のとおりです。

public class DemoGlueJobHandler extends IJobHandler {
    
    

	@Override
	public void execute() throws Exception {
    
    
		XxlJobHelper.log("定时任务执行了一次");
        HttpRequest.post("http://localhost:8088/oos/test")
                  .header(Header.USER_AGENT, "xxl-job")//头信息,多个头信息多次调用此方法即可
                  .timeout(20000)//超时,毫秒
                  .execute();
	}

}

上記のコードは実際にはエグゼキュータで実行され、テストで実行して、問題がなければ貼り付けることができます(インポートやその他の情報のコピーにも注意してください)

以上が本日の全内容です。詳しく知りたい方は公式資料をご覧ください。

おすすめ

転載: blog.csdn.net/weixin_44829930/article/details/122521475