SchedulerX は、Microservices Engine (MSE) の分散ジョブスケジューリングサービスです。サーバー/エージェントアーキテクチャを採用しており、SchedulerX サーバーがスケジューリングと調整を担い、Spring Boot アプリケーションに組み込まれたエージェントがジョブを実行します。アプリケーションを接続すると、SchedulerX コンソールでジョブの定義、スケジューリング、監視ができます。
前提条件
開始する前に、以下をご確認ください。
-
Spring Boot 2.x または 3.x のプロジェクト
-
(オプション) リソース分離のための名前空間。詳細については、「名前空間の管理」の「名前空間の作成」セクションをご参照ください。
ステップ 1:SchedulerX アプリケーションの作成
基本設定の構成
-
MSE SchedulerX コンソールにログインし、上部メニューでリージョンを選択します。
-
左側のナビゲーションペインで、[Application Management] をクリックします。[Namespace] を選択し、[Create Application] をクリックします。
-
以下の設定を入力し、[Next] をクリックします。
重要リソースは正しいリージョンと名前空間に作成してください。リソース情報が有効であることを確認してください。
設定 説明 デフォルト [Application Name] アプリケーションを識別しやすい名前です。 なし [Application ID] エージェントがアクセスするための GroupID です。名前空間内で一意である必要があります。[Application Name] と同じ名前を設定できます。 なし [Application Type] [Regular App]:Kubernetes にデプロイされていない、または Kubernetes ジョブを必要としない場合に選択します。[k8s App]:Kubernetes にデプロイされており、Kubernetes ジョブを必要とする場合に選択します。 Regular App [Edition] ニーズに応じてエディションを選択します。 Professional Edition [Simple Log Service] 有効にすると、コンソールでスケジューリングログを表示できます。Log4j または Logback の設定が必要です。 オフ [load5] 5 分間の最大平均負荷です。クライアントマシンの CPU コア数を超えることはできません。 0 [Memory Usage] 過去 5 分間の平均メモリ使用率がこのしきい値を超えると、ワーカーはビジー状態と見なされます。 90% [Disk Usage] ディスク使用率がこのしきい値を超えると、クライアントマシンはビジー状態と見なされます。 95% [Trigger Busy Machine] マシンがビジー状態でもジョブのトリガーを継続します。 オン 設定 説明 デフォルト [Maximum Number Of Jobs] グループでサポートされるジョブの最大数です。 1000 [Automatic Scale-out] 有効にすると自動でスケールアウトします。[Global Job Count] が必要です。 オフ [Traffic Throttling] 有効にするとトラフィックをスロットリングします。[Task Instance Concurrency] が必要です。 オフ [Calendar] [Financial Day] (取引日) または [Workday] (営業日) でスケジューリングします。 0 
通知設定の構成
-
[Notification Configuration] ページで、[Notification Channel] を選択し、[Contacts] を設定します。連絡先を個別に追加するか、連絡先グループを使用します。連絡先グループを作成するには、「通知の連絡先または通知の連絡先グループの作成」をご参照ください。
設定 説明 [Notification Channel] [Text Message]、[Email]、[Webhook]、または [Phone] [Email] 連絡先のメールアドレスです。 [Webhook] WeCom、Lark、または DingTalk の Webhook URL です。複数の URL はカンマ (,) で区切ります。DingTalk の場合、ロボット設定にキーワード「SchedulerX」(大文字と小文字を区別) を追加します。Webhook の設定詳細については、「Webhook 設定の説明」をご参照ください。Webhook URL の取得方法については、「DingTalk 開発者ドキュメント」、「WeCom 開発者ドキュメント」、および「Lark 開発者ドキュメント」をご参照ください。 [Mobile Phone Number] 連絡先の電話番号です。 
-
ページを更新し、選択したリージョンと名前空間にアプリケーションが表示されることを確認します。
ステップ 2:SchedulerX 依存関係の追加
Spring Boot プロジェクトの pom.xml ファイルに schedulerx2-spring-boot-starter の依存関係を追加します。
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-spring-boot-starter</artifactId>
<version>1.11.5</version> <!-- 最新バージョンに置き換えてください -->
</dependency>
バージョンを最新のエージェントバージョンに置き換えてください。バージョン履歴については、「Agent リリースノート」をご参照ください。
プロジェクトが Logback を使用している場合は、バンドルされている Log4j の依存関係を除外します。
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-spring-boot-starter</artifactId>
<version>1.11.5</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
ステップ 3:接続パラメーターの構成
application.properties ファイルに以下のプロパティを追加します。
# 必須: SchedulerX 接続設定
spring.schedulerx2.endpoint=${endpoint}
spring.schedulerx2.namespace=${namespace}
spring.schedulerx2.groupId=${groupId}
# appKey パラメーターはバージョン 1.2.1 以降でのみサポートされます。
spring.schedulerx2.appKey=${appKey}
# appKey を使用しない場合は、Alibaba Cloud AccessKey と SecretKey、または STS トークンを使用できます。
#spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey}
#spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey}
#spring.schedulerx2.stsToken=${aliyunStsToken}
パラメーターの取得方法:
SchedulerX コンソールにログインします。左側のナビゲーションペインで [Applications] をクリックします。管理したいアプリケーションを見つけ、[Operation] 列の [AccessConfig] をクリックします。[AccessConfig] パネルで、ドロップダウンから [Spring Boot] を選択します。
パラメーターの説明:
-
endpoint:SchedulerxWorker のエンドポイントです。値は、アプリケーションがデプロイされているリージョンのエンドポイントと一致する必要があります。詳細については、「エンドポイント」をご参照ください。 -
[名前空間]: アプリケーションが属する名前空間の ID です。名前空間 ID は、SchedulerX コンソールの [名前空間] ページで確認できます。

-
groupId と appKey: アプリケーションの ID とキーです。SchedulerX コンソールの [アプリケーション] ページで確認できます。

-
aliyunAccessKeyとaliyunSecretKey:Alibaba Cloud アカウントの AccessKey ID と AccessKey シークレットです。AccessKey ペアは、ユーザー管理コンソールの [Security Management] ページで確認できます。
SchedulerX とエージェントは同じリージョンにある必要があります。リージョンが一致しない場合、接続に失敗します。アプリケーションが Alibaba Cloud の外部 (オンプレミスまたは他のクラウドプロバイダー) で実行する場合は、インターネットアクセスを有効にし、インターネットリージョンで SchedulerX アプリケーションを作成してください。「オンプレミス環境からインターネット経由で SchedulerX に接続」をご参照ください。
アプリケーションが YAML を使用している場合は、代わりにこれらの設定を application.yml ファイルに追加します。
spring:
schedulerx2:
endpoint: ${endpoint}
namespace: ${namespace}
groupId: ${groupId}
appKey: ${appKey}
1 つのクライアントから複数のアプリケーションを管理するには、アプリケーション ID をカンマで区切ります:spring.schedulerx2.groupId=animals.dog,animals.cat。各アプリケーションは権限管理のために分離されており、個別のワーカーは必要ありません。
オプションパラメーター
以下のパラメーターは、高度なユースケースをサポートします。
| パラメーター | 説明 | デフォルト | サポート開始バージョン |
|---|---|---|---|
spring.schedulerx2.enabled |
SchedulerX スターターを有効または無効にします。 | true |
0.1.7 |
spring.schedulerx2.host |
マシンに複数の NIC がある場合や、VPN を使用している場合に IP アドレスを指定します。 | 自動検出 | 0.1.7 |
spring.schedulerx2.port |
エージェントがリッスンするポートです。 | ランダムな利用可能ポート | 0.1.7 |
spring.schedulerx2.blockAppStart |
SchedulerX の初期化に失敗した場合にアプリケーションの起動をブロックします。 | true |
1.1.0 |
spring.schedulerx2.shareContainerPool |
エージェント上のすべてのジョブで 1 つのスレッドプールを共有できます。 | false |
1.2.1.2 |
spring.schedulerx2.sharePoolSize |
共有が有効な場合のスレッドプールサイズです。 | 64 |
1.2.1.2 |
spring.schedulerx2.label |
カナリアリリースやストレステスト中に特定のワーカーをターゲットにするためのラベルです。 | なし | 1.2.2.2 |
spring.schedulerx2.enableCgroupMetrics |
cgroup を使用してエージェントのメトリクスを収集します。Kubernetes 環境では手動で有効にする必要があります。 | false |
1.2.2.2 |
spring.schedulerx2.cgroupPathPrefix |
コンテナ内の cgroup パスです。 | /sys/fs/cgroup/cpu/ |
1.2.2.2 |
spring.schedulerx2.enableHeartbeatLog |
ハートビートデータを ${user.home}/logs/schedulerx/heartbeat.log に記録します。 |
true |
1.2.4 |
spring.schedulerx2.mapMasterStatusCheckInterval |
Map モデルでタスクの完了を確認する間隔 (ミリ秒) です。値を小さくすると、秒単位のジョブのスケジューリング頻度が高くなります。 | 3000 |
1.2.5.2 |
spring.schedulerx2.enableSecondDelayCycleIntervalMs |
秒単位のジョブ間隔を秒ではなくミリ秒で解釈します。 | false |
1.2.5.2 |
spring.schedulerx2.broadcastMasterExecEnable |
プライマリノードにブロードキャストジョブの実行を要求します。 | true |
1.8.13 |
spring.schedulerx2.broadcastDispatchRetryTimes |
ブロードキャストのディスパッチが失敗した後の最大再試行回数です。再試行間隔は 2 秒に固定されています。 | 3 |
1.8.13 |
spring.schedulerx2.enableSecondDelayStandaloneDispatch |
秒単位のスタンドアロンジョブのディスパッチを有効にします。 | false |
1.8.13 |
ステップ 4:ジョブプロセッサーの作成
JavaProcessor を継承するクラスを作成して、ジョブのロジックを定義します。次の例では、実行ごとにメッセージを出力します。
package com.aliyun.schedulerx.test.job;
import com.alibaba.schedulerx.worker.domain.JobContext;
import com.alibaba.schedulerx.worker.processor.JavaProcessor;
import com.alibaba.schedulerx.worker.processor.ProcessResult;
import org.springframework.stereotype.Component;
@Component
public class MyHelloJob extends JavaProcessor {
@Override
public ProcessResult process(JobContext context) throws Exception {
System.out.println("hello schedulerx2.0");
return new ProcessResult(true); // 成功したことを示すために true を返します
}
}
-
@Componentはクラスを Spring Bean として登録し、SchedulerX がそれを検出できるようにします。 -
JavaProcessorを継承し、processをオーバーライドしてジョブのロジックを定義します。 -
成功の場合は
new ProcessResult(true)を、失敗の場合はnew ProcessResult(false)を返します。
ステップ 5:接続の確認
-
Spring Boot アプリケーションを起動します。
-
MSE SchedulerX コンソールにログインします。左側のナビゲーションペインで [Applications] をクリックします。
-
アプリケーションを見つけ、[Operation] 列の [View instances] をクリックします。

-
[Total number of instances] 列を確認します。
-
0:接続に失敗しました。設定パラメーター (リージョン、エンドポイント、名前空間、GroupID) とネットワーク接続を確認してください。
-
0 より大きい場合:接続に成功しました。
-
次のステップ
接続が確認できたら、SchedulerX コンソールでジョブを作成してジョブプロセッサーをトリガーします。「ジョブの管理」の「ジョブの作成」セクションをご参照ください。
トラブルシューティング
| 症状 | 考えられる原因 | 解決策 |
|---|---|---|
| エージェントの接続失敗 (インスタンス数 0) | SchedulerX とエージェントのリージョンの不一致 | 両方が同じリージョンを使用していることを確認してください。「エンドポイント」を参照して、endpoint の値が正しいことを確認してください。 |
| エージェントの接続失敗 (インスタンス数 0) | アプリケーションが Alibaba Cloud の外部で実行されており、インターネットエンドポイントがない | インターネットアクセスを有効にし、インターネットリージョンで SchedulerX アプリケーションを作成してください。「インターネット経由での接続」をご参照ください。 |
| エージェントの接続失敗 (インスタンス数 0) | GroupID または AppKey が正しくない | コンソールで [Applications] > [AccessConfig] を開き、値を確認してください。 |
| アプリケーションの起動がブロックされる | SchedulerX が blockAppStart=true (デフォルト) で初期化に失敗した |
spring.schedulerx2.blockAppStart=false を設定して SchedulerX なしでアプリケーションを起動するか、まず接続の問題を解決してください。 |