手把手教你實現xxl-job分佈式任務調度平臺搭建

程序員的成長之路
互聯網/程序員/技術/資料共享 
關注


閱讀本文大概須要 4.5 分鐘。javascript

編輯:業餘草

推薦:https://www.xttblog.com/?p=5097

最近有網友諮詢我 xxl-job 相關的問題,我認爲官方文檔已經寫的很是詳細了,這裏我再給你們寫一個入門級的 3 分鐘實戰 demo,但願可以幫助到更多的「新手用戶」。
首先咱們須要先下載 xxl-job 的源碼,下載地址: github:https://github.com/xuxueli/xxl-job。我這裏下載使用的是 2.1.2 版本,下載完成後解壓,而後使用 IDEA 的Import Project 導入到 IDE 中,注意使用 Maven 方式導入。
將上圖目錄下的 sql 文件放入 mysql 中執行,執行完成以後會生成以下 8 張表。
而後咱們須要修改 xxl-job-admin 工程下的 application.properties 配置文件。
主要修改的就是數據庫鏈接屬性,須要跟上面建立數據庫表的數據庫鏈接信息一致。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
java

配置文件修改完畢以後,由於是一個 SpringBoot 項目,不須要再打成 war 包放入 tomcat 這種操做了,就能夠直接啓動 xxl-job-admin 的啓動類。
成功啓動以後,若是沒有修改 application.properties 配置文件中的端口號和路徑的話,直接打開  http://localhost:8080/xxl-job-admin 就能看到 xxl-job-admin 的監控平臺了,默認用戶名 admin,密碼 123456。
到這裏 xxl-job-admin 就搭建完成了,接下來咱們寫一個 demo,demo 中的代碼均參考自官方網站  https://www.xuxueli.com/xxl-job/,有興趣的同窗能夠自行查閱 項目結構以下:
首先導入 pom 依賴。

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.1.2</version>
</dependency>
mysql

一樣的須要修改配置文件 application.properties。

# web port
server.port=8081

# log config
logging.config=classpath:logback.xml

### 調度中心部署跟地址 [選填]:如調度中心集羣部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳註冊"和"任務結果回調";爲空則關閉自動註冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 執行器AppName [選填]:執行器心跳註冊分組依據;爲空則關閉自動註冊
xxl.job.executor.appname=xxl-job-executor-sample
### 執行器IP [選填]:默認爲空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅做爲通信實用;地址信息用於 "執行器註冊" 和 "調度中心請求並觸發任務";
xxl.job.executor.ip=
### 執行器端口號 [選填]:小於等於0則自動獲取;默認端口爲9999,單機部署多個執行器時,注意要配置不一樣執行器端口;
xxl.job.executor.port=9999
### 執行器通信TOKEN [選填]:非空時啓用;
xxl.job.accessToken=
### 執行器運行日誌文件存儲磁盤路徑 [選填] :須要對該路徑擁有讀寫權限;爲空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 執行器日誌文件保存天數 [選填] : 過時日誌自動清理, 限制值大於等於3時生效; 不然, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30
git

添加 logback.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
    <contextName>logback</contextName>
    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>
程序員

config 類。

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppName(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}
github

最後是須要定時執行的任務邏輯,在 2.1.2 版本中,由原來基於 JobHandler 類任務開發方式,優化爲支持基於方法的任務開發方式;所以,能夠支持單個類中開發多個任務方法,進行類複用。

@Component
public class DemoXxxlJob {
    @XxlJob("demoJobHandler")
    public ReturnT<String> demoJobHandler(String param) throws Exception {
        XxlJobLogger.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            XxlJobLogger.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        return ReturnT.SUCCESS;
    }
}
web

上面的代碼使用的是簡單任務示例(Bean 模式),還支持分片廣播任務、命令行任務、跨平臺 Http 任務、生命週期任務,任務初始化與銷燬時,支持自定義相關邏輯;可根據本身的須要選擇,在源碼中的 xxl-job-executor-sample-springboot 都有相應的示例可供參考。
一切準備就緒以後,咱們就能夠在 xxl-job-admin 上創建執行器了。
新增任務。
選擇你的操做。
執行完成後可查看調度日誌。
日誌詳情。
到這裏整個項目就搭建完成了,整個 demo 很是簡單。不少人就是由於沒用過 xxl-job,因此很是害怕,等你認真翻一遍官網,動手再實踐一遍,最終發現 xxl-job 是如此的簡單!
<END>
推薦閱讀:
Windows給力!能夠扔掉Linux虛擬機了!
22圖詳解ElasticSearch 使用教程
2T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公衆號內回覆「2048」,便可免費獲取!!

微信掃描二維碼,關注個人公衆號spring

朕已閱 sql

本文分享自微信公衆號 - 程序員的成長之路(cxydczzl)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。數據庫

相關文章
相關標籤/搜索