在EDAS控制台中,已經無縫整合了阿里巴巴的分布式任務調度系統SchedulerX作為核心組件,以實現高效的任務調度管理功能。本文將介紹如何在您的Spring Cloud應用中使用SchedulerX實現任務調度,並部署到EDAS中,實現一個簡單Job單機版的任務調度功能。
為什麼使用SchedulerX
SchedulerX是阿里巴巴的一款分布式任務調度產品。它為您提供秒級、精準、高可靠、高可用的定時(基於Cron運算式)任務調度服務,同時提供分布式的任務執行模型,如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控制台,在測試地區中建立任務分組並記錄分組ID。
在建立的任務分組中按以下參數建立任務。
應用ID:選擇在測試地區下剛建立的任務分組。
Processor類名:Job處理介面實作類別的全類名,本文檔中為SimpleTask,和應用中的測試工作類保持一致。
執行模式:單機運行。
cron運算式:預設選項,
*0 * * * * ?*
表示任務每分鐘會被執行一次。描述:無
任務參數:無
在本地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函數,啟動服務。
結果驗證
在IDEA的Console中觀察標準輸出,可以看到會定時地列印出如下的測試資訊。
-----------Hello world---------------
---------IOC Success--------
部署到EDAS
SchedulerX在設計之初就考慮到了從開發環境遷移到EDAS的情境,您可以直接將應用部署到EDAS中,無需修改任何代碼和配置。關於部署方式和詳細步驟的相關內容,請參見建立和部署應用概述和建立和部署應用概述。
在部署完成之後,即可使用EDAS控制台進行任務調度。
在非測試地區使用調度任務的附加步驟
本文檔以在測試地區中使用為例,測試環境為公網環境,您在本地或雲端都可以進行驗證,且沒有許可權的限制。如果您要部署到其它地區(如杭州)中,還需要在建立調度任務並調度的步驟中完成以下操作:
後續操作
您的應用部署到EDAS之後,就可以使用SchedulerX組件實現更多任務調度的能力。