SchedulerX を使用すると、Enterprise Distributed Application Service (EDAS) にデプロイされた Spring Cloud アプリケーションでスケジュールジョブを実行できます。このガイドでは、シンプルジョブ (単一インスタンス実行) ジョブを作成し、ローカルでテストし、EDAS にデプロイする手順を説明します。
SchedulerX は、Alibaba Cloud の分散ジョブスケジューリングプラットフォームです。以下の機能を提供します。
準分単位の精度:cron 式を使用して、秒単位の粒度でジョブをスケジュールします。
高可用性:組み込みのフェールオーバーと信頼性の高い実行。
分散実行モデル:MapReduce などのモデルで並列ワークロードを実行します。
前提条件
開始する前に、以下をご確認ください。
EDAS が有効化されている Alibaba Cloud アカウント
EDAS コンソールへのアクセス
ステップ 1:Maven プロジェクトの作成
scx-example という名前の Maven プロジェクトを作成します。
次の依存関係を pom.xml ファイルに追加します。この構成では、Spring Boot 2.1.4.RELEASE と Spring Cloud Finchley.SR1 を使用します。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- SchedulerX Spring Boot スターター -->
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-spring-boot-starter</artifactId>
<version>${schedulerx2.version}</version>
<!-- Logback を使用する場合は log4j を除外 -->
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>Spring Boot 1.x は保守終了となっています。Spring Boot 1.5.x と Spring Cloud Edgware をまだ使用している場合は、Spring Cloud Alibaba のバージョンを 1.5.1.RELEASE に設定してください。
ステップ 2:アプリケーションのエントリーポイントの作成
ScxApplication という名前の起動クラスを作成します。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ScxApplication {
public static void main(String[] args) {
SpringApplication.run(ScxApplication.class, args);
}
}ステップ 3:テストサービスの作成
TestService という名前の Spring で管理されるサービスクラスを作成します。このクラスは、Spring の Inversion of Control (IoC) インジェクションがジョブクラスで正しく機能することを検証します。
import org.springframework.stereotype.Service;
@Service
public class TestService {
public void test() {
System.out.println("---------IOC Success--------");
}
}ステップ 4:ジョブプロセッサの実装
ScxSimpleJobProcessor を実装する SimpleTask という名前のジョブクラスを作成します。このクラスは、ジョブがトリガーされるたびに実行されるロジックを定義します。
import com.alibaba.edas.schedulerx.ProcessResult;
import com.alibaba.schedulerx.worker.domain.JobContext;
import com.alibaba.schedulerx.worker.processor.JavaProcessor;
import org.springframework.beans.factory.annotation.Autowired;
public class SimpleTask implements ScxSimpleJobProcessor {
@Autowired
private TestService testService;
@Override
public ProcessResult process(JobContext context) {
System.out.println("-----------Hello world---------------");
testService.test();
return new ProcessResult(true);
}
}process メソッドは ProcessResult(true) を返し、実行が成功したことを示します。Spring は @Autowired アノテーションを介して TestService を自動的にインジェクトします。
ステップ 5:EDAS コンソールでのスケジュールジョブの作成
EDAS コンソールにログインします。
test リージョンで、スケジュールジョブグループを作成し、グループ ID をメモします。
ジョブグループで、次のパラメーターを使用してジョブを作成します。
パラメーター 値 説明 アプリケーション ID 前のステップで取得したグループ ID ジョブをジョブグループにリンクします プロセッサクラス名 SimpleTaskジョブインターフェイスを実装する完全なクラス名 タスクタイプ スタンドアロン操作 単一のインスタンスでジョブを実行します cron 式 0 * * * * ?1 分ごとにジョブをトリガーします 説明 (空のまま) オプションのジョブの説明 タスクパラメーター (空のまま) オプションの実行時パラメーター
ステップ 6:アプリケーションの構成
src/main/resources に、次の設定で application.properties を作成します。
server.port=18033
# SchedulerX 接続設定
# プレースホルダーの値を実際の名前空間とグループの認証情報に置き換えてください。
spring.schedulerx2.endpoint=acm.aliyun.com
spring.schedulerx2.namespace=<your-namespace-id>
spring.schedulerx2.groupId=<your-group-id>
spring.schedulerx2.appKey=<your-app-key>次のプレースホルダーを実際の値に置き換えます。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<your-namespace-id> | EDAS コンソールからの名前空間 ID | d1ce9d38-ab9b-444e-ab2a-4***** |
<your-group-id> | スケジュールジョブグループのグループ ID | ステップ 5 で取得 |
<your-app-key> | 認証用のアプリケーションキー | 5pHlwaWpluJGd39****** |
test リージョンは、その regionName として cn-test を使用します。ローカルでテストする場合、トラフィックは権限の制限なしにインターネット経由で送信されます。ステップ 7:ローカルでの実行と検証
ScxApplication の main メソッドを実行してサービスを開始します。
IDE のコンソール出力を確認します。ジョブが正常に実行されると、次のメッセージが 1 分ごとに表示されます。
-----------Hello world---------------
---------IOC Success--------EDAS へのデプロイ
ローカルでの検証後、コードや構成を変更せずにアプリケーションを EDAS にデプロイします。SchedulerX は、開発環境から EDAS へのシームレスな移行をサポートします。
インフラストラクチャに基づいてデプロイメントターゲットを選択します。
| デプロイメントターゲット | ガイド |
|---|---|
| Kubernetes クラスター | Kubernetes クラスターでのアプリケーションの作成とデプロイ |
| Elastic Compute Service (ECS) クラスター | ECS クラスターでのアプリケーションの作成とデプロイ |
デプロイ後、EDAS コンソールからスケジュールジョブを管理およびモニターします。
本番リージョンへのデプロイ
上記の手順では、開発と検証のために test リージョンを使用します。中国 (杭州) などの本番リージョンにデプロイするには、AccessKey の認証情報を application.properties に追加します。
spring.cloud.alicloud.access-key=<your-access-key-id>
spring.cloud.alicloud.secret-key=<your-access-key-secret>AccessKey ID と AccessKey Secret は、セキュリティ管理ページから取得します。
AccessKey の認証情報は安全に保管してください。バージョン管理にコミットすることは避けてください。本番環境では、環境変数またはシークレットマネージャーを使用してください。
次のステップ
アプリケーションを EDAS にデプロイした後、SchedulerX の追加機能を試すことができます。
シンプルジョブ (単一インスタンス実行) 以外の他のジョブタイプを構成します。
MapReduce などの分散実行モデルを設定して、複数のインスタンスにまたがる並列ワークロードを実行します。