SpringBoot整合XxlJob分布式任務調(diào)度平臺
1.XxlJob簡介
官方網(wǎng)址:https://www.xuxueli.com/xxl-job
XXL-JOB是一個分布式任務調(diào)度平臺,其核心設計目標是開發(fā)迅速、學習簡單、輕量級、易擴展?,F(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用。
為什么要使用分布式任務調(diào)度呢?無論是針對分布式項目或者是nginx負載均衡,傳統(tǒng)的定時任務實現(xiàn)方式都很慢滿足,比如
2.XxlJob快速入門
2.1 下載源碼倉庫地址
源碼倉庫地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-job | Download |
http://gitee.com/xuxueli0323/xxl-job | Download |
2.2 定時任務實現(xiàn)步驟
1.在數(shù)據(jù)庫中執(zhí)行項目中的sql腳本
2.目錄結(jié)構(gòu)說明
xxl-job-admin:調(diào)度中心
xxl-job-core:公共依賴
xxl-job-executor-samples:執(zhí)行器Sample示例(選擇合適的版本執(zhí)行器,可直接使用,也可以參考其并將現(xiàn)有項目改造成執(zhí)行器)
:xxl-job-executor-sample-springboot:Springboot版本,通過Springboot管理執(zhí)行器,推薦這種方式;
:xxl-job-executor-sample-frameless:無框架版本;
3.修改調(diào)度中心配置文件
### 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&serverTimezone=Asia/Shanghai
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報警郵箱,如果定時任務執(zhí)行失敗會推送消息給該郵箱
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=授權(quán)碼
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 調(diào)度中心通訊TOKEN [選填]:非空時啟用;
### 如果配置了通訊token,則調(diào)度中心和執(zhí)行器兩個服務的accessToken需保持一致
xxl.job.accessToken=### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
# 調(diào)度中心國際化配置 [必填]: 默認為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN## xxl-job, triggerpool max size
# 調(diào)度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100### xxl-job, log retention days
#調(diào)度中心日志表數(shù)據(jù)保存天數(shù) [必填]:過期日志自動清理;限制大于等于7時生效,否則, 如-1,關閉自動清理功能;
xxl.job.logretentiondays=30
如果已經(jīng)正確進行上述配置,可將項目編譯打包部署。
調(diào)度中心訪問地址:http://localhost:8080/xxl-job-admin (該地址執(zhí)行器將會使用到,作為回調(diào)地址)
默認登錄賬號 “admin/123456”, 登錄后運行界面如下圖所示。
4.配置執(zhí)行器項目
xxl-job-executor-sample-frameless原生方式(不推薦)
“執(zhí)行器”項目:xxl-job-executor-sample-springboot (提供多種版本執(zhí)行器供選擇,現(xiàn)以 springboot 版本為例,可直接使用,也可以參考其并將現(xiàn)有項目改造成執(zhí)行器)
作用:負責接收“調(diào)度中心”的調(diào)度并執(zhí)行;可直接部署執(zhí)行器,也可以將執(zhí)行器集成到現(xiàn)有業(yè)務項目中。
# web port
server.port=8081
# no web
#spring.main.web-environment=false# log config
logging.config=classpath:logback.xml
# 調(diào)度中心部署根地址 [選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔。執(zhí)行器將會使用該地址進行"執(zhí)行器心跳注冊"和"任務結(jié)果回調(diào)";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin# 執(zhí)行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=# 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-llp
# 執(zhí)行器注冊 [選填]:優(yōu)先使用該配置作為注冊地址,為空時使用內(nèi)嵌服務 ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題。
xxl.job.executor.address=
# 執(zhí)行器IP [選填]:默認為空表示自動獲取IP,多網(wǎng)卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務";
xxl.job.executor.ip=
# 執(zhí)行器端口號 [選填]:小于等于0則自動獲?。荒J端口為9999,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口;
xxl.job.executor.port=0
# 執(zhí)行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權(quán)限;為空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# 執(zhí)行器日志文件保存天數(shù) [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30
5.添加執(zhí)行器
6.添加定時任務
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.執(zhí)行定時任務進行測試
查看調(diào)度日志
3.SpringBoot整合XxlJob
3.1 創(chuàng)建SpringBoot工程引入依賴
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${穩(wěn)定版}</version> </dependency>
3.2 編寫properties配置文件
# web port
server.port=8081
# no web
#spring.main.web-environment=false# log config
logging.config=classpath:logback.xml
# 調(diào)度中心部署根地址 [選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔。執(zhí)行器將會使用該地址進行"執(zhí)行器心跳注冊"和"任務結(jié)果回調(diào)";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin# 執(zhí)行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=llp# 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-llp
# 執(zhí)行器注冊 [選填]:優(yōu)先使用該配置作為注冊地址,為空時使用內(nèi)嵌服務 ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題。
xxl.job.executor.address=
# 執(zhí)行器IP [選填]:默認為空表示自動獲取IP,多網(wǎng)卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執(zhí)行器注冊" 和 "調(diào)度中心請求并觸發(fā)任務";
xxl.job.executor.ip=127.0.0.1
# 執(zhí)行器端口號 [選填]:小于等于0則自動獲?。荒J端口為9999,單機部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口;
xxl.job.executor.port=9999
# 執(zhí)行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權(quán)限;為空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# 執(zhí)行器日志文件保存天數(shù) [選填] : 過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30
注意,在調(diào)度中心創(chuàng)建任務時,appname和執(zhí)行器配置的appname必須保持一致; 執(zhí)行器的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; } /** * 針對多網(wǎng)卡、容器內(nèi)部署等情況,可借助 "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: 'xxx.xxx.xxx.' * * 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定時任務。。。。"); } }
創(chuàng)建執(zhí)行器
創(chuàng)建任務
查看后臺執(zhí)行日志
如果需要xxlJob郵件報警功能,則需要在xxl-job-admin中進行配置郵件信息,并在創(chuàng)建任務時指定配置的郵箱地址
### xxl-job, email報警郵箱,如果定時任務執(zhí)行失敗會推送消息給該郵箱
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=授權(quán)碼
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:如果定時任務執(zhí)行頻率很高,頻繁失敗的話,那收郵件就是一個噩夢~
4.XxlJob部署
4.1 jar包部署方式
jar包部署的方式比較簡單,將項目編譯打包部署到服務器上,其他服務和xxljob調(diào)度器之間網(wǎng)絡、接口相通即可
4.2 Docker 鏡像方式搭建調(diào)度中心
下載鏡像
# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建議指定版本號) docker pull xuxueli/xxl-job-admin # 如需自定義 mysql 等配置,可通過 "-e PARAMS" 指定,參數(shù)格式 PARAMS="--key=value --key2=value2" ; # 配置項參考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties # 如需自定義 JVM內(nèi)存參數(shù) 等配置,可通過 "-e JAVA_OPTS" 指定,參數(shù)格式 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分布式任務調(diào)度平臺的文章就介紹到這了,更多相關SpringBoot整合XxlJob內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Springboot實現(xiàn)定時發(fā)送郵件功能
這篇文章主要為大家詳細介紹了基于Springboot實現(xiàn)定時發(fā)送郵件功能的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-03-03JavaCV調(diào)用百度AI實現(xiàn)人臉檢測方法詳解
在檢測人臉數(shù)量、位置、性別、口罩等場景時,可以考慮使用百度開放平臺提供的web接口,一個web請求就能完成檢測得到結(jié)果。本文就為大家介紹JavaCV如何調(diào)用百度AI實現(xiàn)最簡單的人臉檢測,需要的可以參考一下2022-01-01springboot @RequestBody 接收字符串實例
這篇文章主要介紹了springboot @RequestBody 接收字符串實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot Event 事件如何實現(xiàn)異步延遲執(zhí)行
這篇文章主要介紹了Spring Boot Event 事件如何實現(xiàn)異步延遲執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Java泛型之協(xié)變與逆變及extends與super選擇
這篇文章主要介紹了Java泛型之協(xié)變與逆變及extends與super選擇,文章圍繞主題內(nèi)容展開詳細內(nèi)容介紹,需要的小伙伴可以參考一下2022-05-05spring中FactoryBean中的getObject()方法實例解析
這篇文章主要介紹了spring中FactoryBean中的getObject()方法實例解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02