すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:ジョブスケジューリングの実装

最終更新日:Jan 07, 2025

SchedulerX は、Alibaba Cloud Enterprise Distributed Application Service(EDAS)のコアコンポーネントであり、効率的なジョブスケジューリングを実現します。このトピックでは、SchedulerX を使用して [シンプルジョブ単一インスタンス版] タイプの Spring Cloud アプリケーションのジョブをスケジュールし、EDAS にデプロイする方法について説明します。

SchedulerX を使用する理由

SchedulerX は、Alibaba Cloud によって開発された分散ジョブスケジューリングプラットフォームです。 SchedulerX は、分未満の正確で信頼性が高く、可用性の高いスケジューリングサービスを提供し、cron 式をサポートしています。 SchedulerX は、MapReduce などの分散ジョブ実行モデルも提供します。

オンプレミス環境でのジョブのスケジュール

  1. scx-example という名前の Maven プロジェクトを作成します。

  2. 次のサンプルコードに示すように、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 の新しいバージョンを使用することをお勧めします。

  3. scx-exampleScxApplication という名前のスタートアップクラスを作成します。

     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);
         }
     }               
  4. TestService という名前の単純なクラスを作成し、Spring を使用してクラスを制御の反転(IoC)テストジョブに挿入します。

     import org.springframework.stereotype.Service;
    
     @Service
     public class TestService {
    
         public void test() {
             System.out.println("---------IOC Success--------");
         }
     }                        
  5. 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);
         }
    
     }                        
  6. スケジュールされたジョブを作成し、必要な構成を追加します。

    1. [EDAS コンソール] にログインします。 [test] リージョンで、スケジュールされたジョブグループを作成し、グループ ID を記録します。

    2. 作成したジョブグループで、次のパラメーターを指定してジョブを作成します。

      • [アプリケーション ID]: [test] リージョンで作成したグループの ID を選択します。

      • [プロセッサクラス名]: ジョブ処理インターフェースを実装するクラスの完全名。この例では、値は [simpletask] です。この値は、アプリケーションのテストジョブクラスと同じです。

      • [タスクタイプ]: このパラメーターを [スタンドアロン操作] に設定します。

      • [cron 式]: デフォルト値は [*0 * * * * ?*] です。 *0 * * * * ?* は、ジョブが毎分 1 回実行されることを指定します。

      • [説明]: なし。

      • [タスクパラメーター]: なし。

    3. オンプレミス 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******                            
  7. ScxApplication の main 関数を実行して、サービスを開始します。

結果の確認

IntelliJ IDEA コンソールの標準出力で確認します。次のテスト情報が定期的に出力されていることがわかります。

-----------Hello world---------------
---------IOC Success--------            

EDAS へのアプリケーションのデプロイ

SchedulerX は、開発環境から EDAS にアプリケーションを移行するように設計されています。コードや構成を変更することなく、アプリケーションを EDAS に直接デプロイできます。デプロイ方法と手順の詳細については、Kubernetes クラスターでのアプリケーションの作成とデプロイの概要と、Elastic Compute Service(ECS)クラスターでのアプリケーションの作成とデプロイの概要をご参照ください。

アプリケーションがデプロイされた後、EDAS コンソールでジョブをスケジュールできます。

テスト以外のリージョンへの EDAS へのアプリケーションのデプロイ

このトピックでは、テストリージョンが使用され、テストはインターネット経由で実行されます。デプロイ結果は、オンプレミス環境またはクラウドで確認できます。権限の制限は課されません。中国(杭州)などの他のリージョンにアプリケーションをデプロイする場合は、スケジュールされたジョブを作成および実行するときに、次の手順を実行する必要があります。

  1. [EDAS コンソール] にログインします。 [test] リージョンで、スケジュールされたジョブグループを作成し、グループ ID を記録します。

  2. [セキュリティ管理] ページに移動し、AccessKey ID と AccessKey シークレットを取得します。

  3. application.properties ファイルでスケジュールされたジョブを構成します。

    [シンプルジョブ シングルインスタンス版] 以外の他のジョブタイプも構成できます。

  4. application.properties ファイルに、Alibaba Cloud アカウントの AccessKey ID と AccessKey シークレットを追加します。

    spring.cloud.alicloud.access-key=xxxxx
    spring.cloud.alicloud.secret-key=xxxxx                        

次のステップ

アプリケーションが EDAS にデプロイされた後、SchedulerX コンポーネントを使用して、より多くのジョブスケジューリング機能を実装できます。