SchedulerX は、Alibaba Cloud Enterprise Distributed Application Service(EDAS)のコアコンポーネントであり、効率的なジョブスケジューリングを実現します。このトピックでは、SchedulerX を使用して [シンプルジョブ単一インスタンス版] タイプの Spring Cloud アプリケーションのジョブをスケジュールし、EDAS にデプロイする方法について説明します。
SchedulerX を使用する理由
SchedulerX は、Alibaba Cloud によって開発された分散ジョブスケジューリングプラットフォームです。 SchedulerX は、分未満の正確で信頼性が高く、可用性の高いスケジューリングサービスを提供し、cron 式をサポートしています。 SchedulerX は、MapReduce などの分散ジョブ実行モデルも提供します。
オンプレミス環境でのジョブのスケジュール
scx-exampleという名前の Maven プロジェクトを作成します。次のサンプルコードに示すように、Spring Boot 2.1.4.RELEASE および Spring Cloud Finchley.SR1 の依存関係を pom.xml ファイルに追加します。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-spring-boot-starter</artifactId> <version>${schedulerx2.version}</version> <!--logback を使用する場合は、log4j と log4j2 を除外します。--> <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 です。
Spring Boot 1.x はサポート終了に達しました。そのため、アプリケーションの開発には、Spring Boot の新しいバージョンを使用することをお勧めします。
scx-exampleの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); } }TestServiceという名前の単純なクラスを作成し、Spring を使用してクラスを制御の反転(IoC)テストジョブに挿入します。import org.springframework.stereotype.Service; @Service public class TestService { public void test() { System.out.println("---------IOC Success--------"); } }SimpleTaskという名前の単純なクラスをテストジョブクラスとして作成し、TestServiceをクラスに挿入します。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); } }スケジュールされたジョブを作成し、必要な構成を追加します。
[EDAS コンソール] にログインします。 [test] リージョンで、スケジュールされたジョブグループを作成し、グループ ID を記録します。
作成したジョブグループで、次のパラメーターを指定してジョブを作成します。
[アプリケーション ID]: [test] リージョンで作成したグループの ID を選択します。
[プロセッサクラス名]: ジョブ処理インターフェースを実装するクラスの完全名。この例では、値は [simpletask] です。この値は、アプリケーションのテストジョブクラスと同じです。
[タスクタイプ]: このパラメーターを [スタンドアロン操作] に設定します。
[cron 式]: デフォルト値は [*0 * * * * ?*] です。
*0 * * * * ?*は、ジョブが毎分 1 回実行されることを指定します。[説明]: なし。
[タスクパラメーター]: なし。
オンプレミス Maven プロジェクトの src/main/resources パスに、application.properties ファイルを作成し、次の構成をファイルに追加します。
server.port=18033 # ジョブのリージョン(テストリージョンの **regionName** は *cn-test*)とグループ ID(group-id)を指定します。 spring.schedulerx2.endpoint=acm.aliyun.com spring.schedulerx2.namespace=d1ce9d38-ab9b-444e-ab2a-4***** spring.schedulerx2.groupId=**** spring.schedulerx2.appKey=5pHlwaWpluJGd39******
ScxApplicationの main 関数を実行して、サービスを開始します。
結果の確認
IntelliJ IDEA コンソールの標準出力で確認します。次のテスト情報が定期的に出力されていることがわかります。
-----------Hello world---------------
---------IOC Success-------- EDAS へのアプリケーションのデプロイ
SchedulerX は、開発環境から EDAS にアプリケーションを移行するように設計されています。コードや構成を変更することなく、アプリケーションを EDAS に直接デプロイできます。デプロイ方法と手順の詳細については、Kubernetes クラスターでのアプリケーションの作成とデプロイの概要と、Elastic Compute Service(ECS)クラスターでのアプリケーションの作成とデプロイの概要をご参照ください。
アプリケーションがデプロイされた後、EDAS コンソールでジョブをスケジュールできます。
テスト以外のリージョンへの EDAS へのアプリケーションのデプロイ
このトピックでは、テストリージョンが使用され、テストはインターネット経由で実行されます。デプロイ結果は、オンプレミス環境またはクラウドで確認できます。権限の制限は課されません。中国(杭州)などの他のリージョンにアプリケーションをデプロイする場合は、スケジュールされたジョブを作成および実行するときに、次の手順を実行する必要があります。
[EDAS コンソール] にログインします。 [test] リージョンで、スケジュールされたジョブグループを作成し、グループ ID を記録します。
[セキュリティ管理] ページに移動し、AccessKey ID と AccessKey シークレットを取得します。
application.propertiesファイルでスケジュールされたジョブを構成します。[シンプルジョブ シングルインスタンス版] 以外の他のジョブタイプも構成できます。
application.propertiesファイルに、Alibaba Cloud アカウントの AccessKey ID と AccessKey シークレットを追加します。spring.cloud.alicloud.access-key=xxxxx spring.cloud.alicloud.secret-key=xxxxx
次のステップ
アプリケーションが EDAS にデプロイされた後、SchedulerX コンポーネントを使用して、より多くのジョブスケジューリング機能を実装できます。