全部產品
Search
文件中心

Enterprise Distributed Application Service:實現任務調度

更新時間:Jun 30, 2024

在EDAS控制台中,已經無縫整合了阿里巴巴的分布式任務調度系統SchedulerX作為核心組件,以實現高效的任務調度管理功能。本文將介紹如何在您的Spring Cloud應用中使用SchedulerX實現任務調度,並部署到EDAS中,實現一個簡單Job單機版的任務調度功能。

為什麼使用SchedulerX

SchedulerX是阿里巴巴的一款分布式任務調度產品。它為您提供秒級、精準、高可靠、高可用的定時(基於Cron運算式)任務調度服務,同時提供分布式的任務執行模型,如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-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);
         }
     }               
  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控制台,在測試地區中建立任務分組並記錄分組ID。

    2. 在建立的任務分組中按以下參數建立任務。

      • 應用ID:選擇在測試地區下剛建立的任務分組。

      • Processor類名:Job處理介面實作類別的全類名,本文檔中為SimpleTask,和應用中的測試工作類保持一致。

      • 執行模式單機運行

      • cron運算式預設選項*0 * * * * ?*表示任務每分鐘會被執行一次。

      • 描述:無

      • 任務參數:無

    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函數,啟動服務。

結果驗證

在IDEA的Console中觀察標準輸出,可以看到會定時地列印出如下的測試資訊。

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

部署到EDAS

SchedulerX在設計之初就考慮到了從開發環境遷移到EDAS的情境,您可以直接將應用部署到EDAS中,無需修改任何代碼和配置。關於部署方式和詳細步驟的相關內容,請參見建立和部署應用概述建立和部署應用概述

在部署完成之後,即可使用EDAS控制台進行任務調度。

在非測試地區使用調度任務的附加步驟

本文檔以在測試地區中使用為例,測試環境為公網環境,您在本地或雲端都可以進行驗證,且沒有許可權的限制。如果您要部署到其它地區(如杭州)中,還需要在建立調度任務並調度的步驟中完成以下操作:

  1. 登入EDAS控制台,在測試地區中建立任務分組並記錄分組ID。

  2. 登入安全資訊管理頁面,擷取AccessKey ID和AccessKey Secret。

  3. application.properties檔案中配置調度任務。

    除了簡單Job單機版,您還可以配置其它類型的調度任務。

  4. application.properties檔案中添加您阿里雲帳號的AccessKey ID和AccessKey Secret的配置。

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

後續操作

您的應用部署到EDAS之後,就可以使用SchedulerX組件實現更多任務調度的能力。