首頁 > Java > java教程 > SpringBoot怎麼整合XxlJob分散式任務調度平台

SpringBoot怎麼整合XxlJob分散式任務調度平台

WBOY
發布: 2023-05-14 18:58:06
轉載
1202 人瀏覽過

1.XxlJob簡介

XXL-JOB是一個分散式任務排程平台,其核心設計目標是開發快速、學習簡單、輕量、易擴充。現已開放原始碼並接入多家公司線上產品線,開箱即用。

為什麼要使用分散式任務調度呢?無論是針對分散式專案或nginx負載平衡,傳統的定時任務實作方式都很慢滿足,例如

SpringBoot怎麼整合XxlJob分散式任務調度平台

2.XxlJob快速入門

2.1 下載原始碼倉庫位址

#https://github.com /xuxueli/xxl-job Download
http://gitee.com/xuxueli0323/xxl-job #Download
#

2.2 定時任務實現步驟

1.在資料庫中執行專案中的sql腳本

SpringBoot怎麼整合XxlJob分散式任務調度平台

2.目錄結構說明

xxl-job-admin:調度中心
xxl-job-core:公共依賴
xxl-job-executor-samples:執行器Sample範例(選擇適當的版本執行器,可直接使用,也可以參考其並將現有專案改造成執行器)
    :xxl-job-executor-sample-springboot:Springboot版本,透過Springboot管理執行器,推薦這種方式;
    :xxl-job- executor-sample-frameless:無框架版本;

3.修改調度中心設定檔


web
server.port=8080

server.servlet.context-path=/xxl-job-admin



actuator

management.server.servlet.context-path=/actuator

management.health.mail.enabled= false


resources

spring.mvc.servlet.load-on-startup=0

spring.mvc.static-path-pattern=/static/**
spring. resources.static-locations=classpath:/static/


freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/

spring.freemarker.suffix=.ftl

spring .freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.





# mybatis

mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml

#mybatis.type-aliases-package=com.xxl.job.admin.core.model


xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverUnicode=true&characterEncoding=UTF-8&autoReconnect=true&server&serverzone#Asia/ShangJ #spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


# datasource -pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

spring.datasource.hikari.minimum-idle=10

spring.datasource.hikari.maximum-pool-size=30
#spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max -lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

xxl-job, email警報郵箱,如果定時任務執行失敗會推播訊息給該郵件信箱

spring.mail.host=smtp.qq.com
spring.mail.port= 25
spring.mail.username=XXX@qq.com

spring.mail.from=XXX@qq.com

spring.mail.password=授權碼
spring.mail.properties.mail .smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

spring.mail.properties.mail.smtp.starttls.required=true

spring.mail.properties .mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory


xxl-job, access token 調度中心通訊TOKEN [選填]:非空時啟用; 

 如果配置了通訊token,則調度中心和執行器兩個服務的accessToken需保持一致
xxl.job.accessToken=

xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")

# 調度中心國際化配置[必填]: 預設為"zh_CN"/中文簡體, 可選範圍為"zh_CN"/中文簡體, " zh_TC"/中文繁體and "en"/英文;

xxl.job.i18n=zh_CN

## xxl-job, triggerpool max size

# 調度執行緒池最大執行緒設定【必填】

xxl.job.triggerpool.fast.max=200

xxl.job.triggerpool.slow.max=100SpringBoot怎麼整合XxlJob分散式任務調度平台

## xxl-job, log retention days

#調度中心日誌表資料保存天數[必填]:過期日誌自動清理;限制大於等於7時生效,否則, 如-1,關閉自動清理功能;

xxl.job.logretentiondays=30



#如果已經正確進行上述配置,可將專案編譯打包部署。

調度中心存取位址:http://localhost:8080/xxl-job-admin (此位址執行器將會使用到,作為回調位址)


預設登入帳號「admin/ 123456”, 登入後運行介面如下圖所示。

######4.設定執行器項目######xxl-job-executor-sample-frameless原生方式(不建議)###「執行器」項目:xxl-job-executor-sample-springboot (提供多種版本執行器供選擇,現以springboot 版本為例,可直接使用,也可以參考其並將現有專案改造成執行器)###作用:負責接收「調度中心」的調度並執行;可直接部署執行器,也可以將執行器整合到現有業務項目中。 ########## web port###server.port=8081#### no web####spring.main.web-environment=false###

# log config
logging.config=classpath:logback.xml
# 調度中心部署根位址 [選填]:如調度中心叢集部署存在多個位址則以逗號分隔。執行器將會使用該位址進行"執行器心跳註冊"和"任務結果回呼";為空則關閉自動註冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl -job-admin

# 執行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=

# 執行器AppName [選填]:執行器心跳註冊分組依據;為空則關閉自動註冊
xxl.job.executor.appname=xxl-job-executor-llp
# 執行器註冊[選填]:優先使用此設定為註冊位址,為空時使用內嵌服務」IP:PORT“ 作為註冊位址。從而更靈活的支援容器類型執行器動態IP和動態映射連接埠問題。
xxl.job.executor.address=
# 執行器IP [選填]:預設為空表示自動取得IP,多網卡時可手動設定指定IP,該IP不會綁定Host僅作為通訊實用;位址資訊用於"執行器註冊" 和"調度中心請求並觸發任務";
xxl.job.executor.ip=
# 執行器連接埠號碼[選填]:小於等於0則自動取得;預設連接埠為9999,單機部署多個執行器時,請注意要設定不同執行器連接埠;
xxl.job.executor.port=0
# 執行器執行日誌檔案儲存磁碟路徑[選填] :需要對此路徑擁有讀寫權限;為空則使用預設路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# 執行器日誌檔案保存天數[選填] : 過期日誌自動清理, 限制值大於等於3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30

#5 .新增執行器

SpringBoot怎麼整合XxlJob分散式任務調度平台

6.新增定時任務

SpringBoot怎麼整合XxlJob分散式任務調度平台

7.寫測試程式

package com.xxl.job.executor.service.jobhandler;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class TestXxlJob {
    private static Logger logger = LoggerFactory.getLogger(TestXxlJob.class);
    @XxlJob(value = "testJobHandler", init = "init", destroy = "destroy")
    public void testJobHandler() throws Exception {
        logger.info("进入xxlJob定时任务。。。。");
    }
    public void init(){
        logger.info("init");
    }
    public void destroy(){
        logger.info("destroy");
    }
    @XxlJob("testJobHandler02")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        logger.info("进入testJobHandler02定时任务。。。。");
    }
}
登入後複製

8.執行定時任務進行測試

SpringBoot怎麼整合XxlJob分散式任務調度平台

查看調度日誌

SpringBoot怎麼整合XxlJob分散式任務調度平台

#3.SpringBoot整合XxlJob

#3.1 建立SpringBoot工程引入依賴

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>${稳定版}</version>
</dependency>
登入後複製

3.2 編寫properties設定檔

# web port
server.port=8081
# no web
# spring.main.web-environment=false

# log config
logging.config=classpath:logback.xml
# 調度中心部署根位址[選填]:如調度中心叢集部署時存在多個地址則以逗號分隔。執行器將會使用該位址進行"執行器心跳註冊"和"任務結果回呼";為空則關閉自動註冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl -job-admin

# 執行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=llp

# 執行器AppName [選填]:執行器心跳註冊分組依據;為空則關閉自動註冊
xxl.job.executor.appname=xxl-job-executor-llp
# 執行器註冊[選填]:優先使用此設定為註冊位址,為空時使用內嵌服務”IP:PORT“ 作為註冊位址。從而更靈活的支援容器類型執行器動態IP和動態映射連接埠問題。
xxl.job.executor.address=
# 執行器IP [選填]:預設為空表示自動取得IP,多網卡時可手動設定指定IP,該IP不會綁定Host僅作為通訊實用;位址資訊用於"執行器註冊" 和"調度中心請求並觸發任務";
xxl.job.executor.ip=127.0.0.1
# 執行器連接埠號碼[選填]:小於等於0則自動取得;預設連接埠為9999,單機部署多個執行器時,請注意設定不同執行器連接埠;
xxl.job.executor.port=9999
# 執行器執行日誌檔案儲存磁碟路徑[選填] :需要對此路徑擁有讀寫權限;為空則使用預設路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
## 執行器日誌文件儲存天數 [選填] :過期日誌自動清理, 限制值大於等於3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30

#注意,在調度中心建立任務時,appname和執行器配置的appname必須保持一致;執行器的ip和port建議都配置上

3.3 編寫xxljob配置類別

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Value("${xxl.job.executor.appname}")
    private String appname;
    @Value("${xxl.job.executor.address}")
    private String address;
    @Value("${xxl.job.executor.ip}")
    private String ip;
    @Value("${xxl.job.executor.port}")
    private int port;
    @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.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: &#39;xxx.xxx.xxx.&#39;
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}
登入後複製

3.4 寫job類別進行測試

@Component
public class TestXxlJob {
    private static Logger logger = LoggerFactory.getLogger(TestXxlJob.class);
    @XxlJob(value = "testJobHandler", init = "init", destroy = "destroy")
    public void testJobHandler() throws Exception {
        logger.info("进入xxlJob定时任务。。。。");
    }
    public void init(){
        logger.info("init");
    }
    public void destroy(){
        logger.info("destroy");
    }
    @XxlJob("testJobHandler02")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        logger.info("进入testJobHandler02定时任务。。。。");
    }
}
登入後複製

建立執行器

SpringBoot怎麼整合XxlJob分散式任務調度平台

#建立任務

SpringBoot怎麼整合XxlJob分散式任務調度平台##

查看后台执行日志

SpringBoot怎麼整合XxlJob分散式任務調度平台

如果需要xxlJob邮件报警功能,则需要在xxl-job-admin中进行配置邮件信息,并在创建任务时指定配置的邮箱地址

### xxl-job, email报警邮箱,如果定时任务执行失败会推送消息给该邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=XXX@qq.com
spring.mail.from=XXX@qq.com
spring.mail.password=授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

ps:如果定时任务执行频率很高,频繁失败的话,那收邮件就是一个噩梦~

SpringBoot怎麼整合XxlJob分散式任務調度平台

4.XxlJob部署

4.1 jar包部署方式

jar包部署的方式比较简单,将项目编译打包部署到服务器上,其他服务和xxljob调度器之间网络、接口相通即可

4.2 Docker 镜像方式搭建调度中心

下载镜像

# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/     (建议指定版本号)
docker pull xuxueli/xxl-job-admin
# 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value  --key2=value2" ;
# 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:{指定版本}
登入後複製

以上是SpringBoot怎麼整合XxlJob分散式任務調度平台的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板