ホームページ  >  記事  >  Java  >  SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

WBOY
WBOY転載
2023-05-14 18:58:061180ブラウズ

1. XxlJob の概要

XXL-JOB は分散タスク スケジューリング プラットフォームであり、その中心的な設計目標は、迅速な開発、簡単な学習、軽量、簡単な拡張です。ソースコードは現在公開されており、多くの企業のオンライン製品ラインに接続されており、すぐに使用できるようになっています。

分散タスク スケジューリングを使用する理由分散プロジェクトの場合でも、nginx の負荷分散の場合でも、

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

##2.XxlJob Quick Start

2.1 などの従来のスケジュールされたタスクの実装方法では、満足するには非常に時間がかかります。ダウンロード ソース コード ウェアハウス アドレス

#ソース コード ウェアハウス アドレスhttps://github.com /xuxueli/xxl-job##http://gitee.com/xuxueli0323/xxl-jobダウンロード##

2.2 スケジュールされたタスクの実装手順

1. データベース内のプロジェクトの SQL スクリプトを実行します

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

2. ディレクトリ構造の説明

xxl-job-admin: スケジュール センター
xxl-job-core: パブリック依存関係
xxl-job-executor-samples: エグゼキューター サンプル (使用できるエグゼキューターの適切なバージョンを選択します)直接参照して、既存のプロジェクトをエグゼキュータに変換することもできます)
: xxl-job-executor-sample-springboot: Springboot バージョン、Springboot 経由でエグゼキュータを管理する、この方法が推奨されます;
: xxl-job- executor-sample-frameless: フレームレス バージョン;

3. ディスパッチ センター設定ファイルを変更します


web
server.port=8080

server.servlet.context-path=/xxl-job-admin



actuator

management.server.servlet.context-path=/actuator

management.health.mail.enabled= false


リソース

spring.mvc.servlet.load-on-startup=0

spring.mvc.static-path-pattern=/static/**
spring. resource.static-locations=classpath:/static/


freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/

spring.freemarker.suffix=.ftl

spring .freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.





# mybatis

mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml

#mybatis.type-aliases-package=com.xxl.job.admin.core.model


xxl-job、データソース
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


データソース-pool

spring.datasource.type=com.zaxxer.hikari.HikariDataSource

spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max -lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

xxl-job、電子メール アラーム メールボックス、スケジュールされたタスクの実行が失敗した場合、メッセージはメールボックス
spring.mail.host=smtp.qq.com
spring にプッシュされます。 mail.port= 25

spring.mail.username=XXX@qq.com

spring.mail.from=XXX@qq.com
spring.mail.password=認証コード
spring.mail .properties.mail .smtp.auth=true

spring.mail.properties.mail.smtp.starttls.enable=true

spring.mail.properties.mail.smtp.starttls.required=true
spring .mail.properties .mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

xxl-job、アクセス トークン ディスパッチ センター通信 TOKEN [オプション]: 空でない場合に有効;


通信トークンが構成されている場合、ディスパッチ センターとエグゼキューターの 2 つのサービスの accessToken は一貫している必要があります。
xxl.job.accessToken=

xxl-job, i18n (デフォルトは zh_CN で、「zh_CN」、「zh_TC」、および「en」を選択できます)

# ディスパッチ センターの国際化構成 [必須]: デフォルトは「zh_CN」/簡体字中国語、オプションの範囲は「zh_CN」です。 /簡体字中国語、" zh_TC"/繁体字中国語、および "en"/英語;

xxl.job.i18n=zh_CN

## xxl-job、triggerpool max size

# スレッド プールの最大値のスケジュールスレッド設定 [必須] ]

xxl.job.triggerpool.fast.max=200SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法xxl.job.triggerpool.slow.max=100

xxl-job、ログ保存日数

#スケジュール 中央ログ テーブル データを保存する日数 [必須]: 期限切れのログは自動的にクリーニングされます。制限が 7 以上の場合に有効になり、それ以外の場合 (-1 など)、自動クリーニング機能は無効になります。オフ;
xxl.job.logretentiondays=30

上記の構成が正しく実行されていれば、プロジェクトをコンパイル、パッケージ化、デプロイできます。


スケジュール センターのアクセス アドレス: http://localhost:8080/xxl-job-admin (このアドレスは実行者によってコールバック アドレスとして使用されます)

デフォルトのログイン アカウントは「」です。 admin/123456」でログイン後の実行インターフェースは以下の通りです。

############4. エグゼキュータ プロジェクトを設定します ######xxl-job-executor-sample-frameless ネイティブ方法 (非推奨) ### "エグゼキュータ" プロジェクト : xxl-job-executor-sample-springboot (複数のバージョンのエグゼキュータが用意されており、選択できます。springboot バージョンは例として挙げています。直接使用することも、参照して既存のプロジェクトをエグゼキュータに変換することもできます)## #機能: 「スケジューリング センター」からのスケジュールの受信と実行を担当します。エグゼキュータは直接展開することも、既存のビジネス プロジェクトに統合することもできます。 ########## Web ポート###server.port=8081#### Web なし####spring.main.web-environment=false###

# log config
logging.config=classpath:logback.xml
# スケジューリング センター デプロイメント ルート アドレス [オプション]: ディスパッチ センター クラスター デプロイメントに複数のアドレスがある場合は、それらをカンマで区切ります。実行プログラムは、このアドレスを「実行プログラムのハートビート登録」と「タスク結果のコールバック」に使用します。これが空の場合、自動登録はオフになります。
xxl.job.admin.addresses=http://127.0.0.1: 8080/xxl -job-admin

# Executor communication TOKEN [オプション]: 空でない場合に有効;
xxl.job.accessToken=

# Executor AppName [オプション]: 実行エグゼキュータのハートビート登録のグループ化基準。空の場合、自動登録はオフになります。
xxl.job.executor.appname=xxl-job-executor-llp
# エグゼキュータの登録 [オプション]: この構成を登録アドレス。空の場合は、組み込みサービス「IP:PORT」を登録アドレスとして使用します。これにより、コンテナ タイプのエグゼキュータの動的 IP および動的マッピング ポートの問題に対するより柔軟なサポートが提供されます。
xxl.job.executor.address=
# Executor IP [オプション]: IP を自動的に取得するため、デフォルトは空です。複数のネットワーク カードがある場合は、指定した IP を手動で設定できます。IP は自動的に取得されません。ホストにバインドされ、通信にのみ使用されます。実用的; アドレス情報は、「実行者の登録」および「センターのリクエストとトリガーのタスクのスケジューリング」に使用されます。
xxl.job.executor.ip=
# 実行者のポート数値 [オプション]: 0 以下の場合は自動 取得; デフォルトのポートは 9999 です。単一のマシンに複数のエグゼキュータをデプロイする場合は、異なるエグゼキュータ ポートを構成するように注意してください;
xxl.job.executor.port=0
# Executor 実行ログ ファイル ストレージ ディスク パス [オプション] [オプション]: 期限切れのログの自動クリーニング。制限値が 3 以上の場合に有効です。それ以外の場合 (-1 など)、自動クリーニング機能を閉じます。
xxl.job.executor.logretentiondays=30

5 .実行者を追加します

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法6.スケジュールされたタスクを追加します

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法7.テスト プログラムを作成する

package com.xxl.job.executor.service.jobhandler;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class TestXxlJob {
    private static Logger logger = LoggerFactory.getLogger(TestXxlJob.class);
    @XxlJob(value = "testJobHandler", init = "init", destroy = "destroy")
    public void testJobHandler() throws Exception {
        logger.info("进入xxlJob定时任务。。。。");
    }
    public void init(){
        logger.info("init");
    }
    public void destroy(){
        logger.info("destroy");
    }
    @XxlJob("testJobHandler02")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        logger.info("进入testJobHandler02定时任务。。。。");
    }
}

8.テスト用にスケジュールされたタスクを実行する

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法スケジュール ログを表示する

#3.SpringBoot は XxlJob を統合しますSpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

3.1 SpringBoot プロジェクトを作成し、依存関係を導入します

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>${稳定版}</version>
</dependency>

3.2 プロパティ構成ファイルを書き込みます

# Web ポート

server.port=8081
# Web なし

# spring.main.web-environment=false
## log config
logging.config= classpath:logback.xml
# スケジューリング センター デプロイメント ルート アドレス [オプション]: ディスパッチング センター クラスター デプロイメントが存在する場合 複数のアドレスはカンマで区切られます。実行プログラムは、このアドレスを「実行プログラムのハートビート登録」と「タスク結果のコールバック」に使用します。これが空の場合、自動登録はオフになります。

xxl.job.admin.addresses=http://127.0.0.1: 8080/xxl -job-admin


# Executor communication TOKEN [オプション]: 空でない場合に有効;
xxl.job.accessToken=llp

# Executor AppName [オプション]:エグゼキュータ ハートビート登録グループ化ベース。空の場合、自動登録はオフになります。

xxl.job.executor.appname=xxl-job-executor-llp
# エグゼキュータ登録 [オプション]: この設定を登録アドレスとして使用することを優先します。 、空の場合は、埋め込みサービス「IP:PORT」を登録アドレスとして使用します。これにより、コンテナ タイプのエグゼキュータの動的 IP および動的マッピング ポートの問題に対するより柔軟なサポートが提供されます。

xxl.job.executor.address=

# Executor IP [オプション]: IP を自動的に取得するため、デフォルトは空です。複数のネットワーク カードがある場合は、指定した IP を手動で設定できます。IP は自動的に取得されません。ホストにバインドされ、通信にのみ使用されます。実用的; アドレス情報は、「実行者の登録」と「センターのリクエストとトリガーのタスクのスケジューリング」に使用されます;
xxl.job.executor.ip=127.0.0.1
# Executor ポート番号 [オプション]: 0 以下が自動的に取得されます。デフォルトのポートは 9999 です。単一のマシンに複数の Executor をデプロイする場合は、異なる Executor ポート (
xxl.job.executor) を構成するように注意してください。 port=9999
# Executor 実行ログ ファイル ストレージ ディスク パス [オプション]: パスに対する読み取りおよび書き込み権限が必要です。パスが空の場合は、デフォルトのパスが使用されます。
xxl.job.executor .logpath=/data/applogs/xxl-job/jobhandler
# Executor ログ ファイル 保存日数 [オプション]: 期限切れのログは自動的に消去され、制限値が 3 以上の場合に有効になります。 ; それ以外の場合、-1 など、自動クリーニング機能はオフになります;
xxl.job.executor.logretentiondays=30


ディスパッチ センターでタスクを作成するとき、アプリ名はオフになることに注意してください。また、エグゼキューターで構成されたアプリ名は一貫している必要があります。エグゼキューターの IP とポートを構成することをお勧めします

3.3 xxljob 構成クラスを作成します
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Value("${xxl.job.executor.appname}")
    private String appname;
    @Value("${xxl.job.executor.address}")
    private String address;
    @Value("${xxl.job.executor.ip}")
    private String ip;
    @Value("${xxl.job.executor.port}")
    private int port;
    @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.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: &#39;xxx.xxx.xxx.&#39;
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

3.4 テスト用のジョブ クラスを作成します

@Component
public class TestXxlJob {
    private static Logger logger = LoggerFactory.getLogger(TestXxlJob.class);
    @XxlJob(value = "testJobHandler", init = "init", destroy = "destroy")
    public void testJobHandler() throws Exception {
        logger.info("进入xxlJob定时任务。。。。");
    }
    public void init(){
        logger.info("init");
    }
    public void destroy(){
        logger.info("destroy");
    }
    @XxlJob("testJobHandler02")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        logger.info("进入testJobHandler02定时任务。。。。");
    }
}

実行者の作成

##タスクの作成

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法##

查看后台执行日志

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

如果需要xxlJob邮件报警功能,则需要在xxl-job-admin中进行配置邮件信息,并在创建任务时指定配置的邮箱地址

### xxl-job, email报警邮箱,如果定时任务执行失败会推送消息给该邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=XXX@qq.com
spring.mail.from=XXX@qq.com
spring.mail.password=授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

ps:如果定时任务执行频率很高,频繁失败的话,那收邮件就是一个噩梦~

SpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法

4.XxlJob部署

4.1 jar包部署方式

jar包部署的方式比较简单,将项目编译打包部署到服务器上,其他服务和xxljob调度器之间网络、接口相通即可

4.2 Docker 镜像方式搭建调度中心

下载镜像

# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/     (建议指定版本号)
docker pull xuxueli/xxl-job-admin
# 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value  --key2=value2" ;
# 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:{指定版本}
リリース ダウンロード
ダウンロード

以上がSpringBoot が XxlJob 分散タスク スケジューリング プラットフォームを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。