xxl-job搭建、部署、SpringBoot集成xxl-job
一、搭建xxl-job
1、下載xxl-job代碼
碼云地址:https://gitee.com/xuxueli0323/xxl-job
gitHub地址:https://github.com/xuxueli/xxl-job
2、執(zhí)行SQL
在數據庫執(zhí)行 xxl-jobdocdb ables_xxl_job.sql
3、導入idea
導入已存在的模塊:File--New--Module from Existing Sources...
選擇pom文件,直接導入
4、修改配置文件
修改配置文件:xxl-jobxxl-job-adminsrcmainesourcesapplication.properties
調整數據庫連接、控制臺用戶名密碼等內容
此處特別說明一點,郵箱配置的password并不是郵箱密碼,而是郵箱的授權碼(授權碼獲取步驟自己百度),如果配置成郵箱密碼,當定時任務異常需要發(fā)郵件時,會出現郵件發(fā)送535錯誤。
### 調度中心項目的端口號以及訪問路徑 server.port=8081 server.context-path=/xxl-job-admin ### 配置靜態(tài)文件的前綴 spring.mvc.static-path-pattern=/static/** spring.resources.static-locations=classpath:/static/ ### 配置模板文件 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的mapper文件地址 mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml ### 配置數據庫的地址 spring.datasource.url=jdbc:mysql://***:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource spring.datasource.tomcat.max-wait=10000 spring.datasource.tomcat.max-active=30 spring.datasource.tomcat.test-on-borrow=true spring.datasource.tomcat.validation-query=SELECT 1 spring.datasource.tomcat.validation-interval=30000 ### 配置報警郵箱 spring.mail.host=smtp.qq.com spring.mail.port=25 spring.mail.username=xxx@qq.com spring.mail.password=xxx 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 ### 調度中心通訊TOKEN,非空時啟用 xxl.job.accessToken= ### 調度中心國際化設置,默認為中文版本,值設置為“en”時切換為英文版本 xxl-job, i18n (default empty as chinese, "en" as english) xxl.job.i18n= ### 7、管理界面的登錄用戶名密碼 xxl.job.login.username=admin xxl.job.login.password=123456
5、啟動項目
運行main函數,訪問http://localhost:8081/xxl-job-admin/toLogin ,輸入用戶名密碼(在application.properties中配置的),登陸,到此為止,xxl-job項目部署成功。
二、項目中使用xxl-job
1、導入xxl-job依賴
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.2</version>
</dependency>
2、配置文件中(application.yml)配置xxl-job配置
其中appname為項目名
xxl:
job:
accessToken:
executor:
appname: demo
ip:
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: -1
port: 9999
admin:
addresses: http://localhost:8081/xxl-job-admin
3、添加xxl-job配置類
直接復制,無需更改。
package com.example.demo.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class XXlJobConfig {
@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(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
log.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;
}
}
4、定時任務控制器
?。?)定時任務實現類
此處模擬一個最簡單的打印輸出
package com.example.demo.service;
import org.springframework.stereotype.Service;
@Service
public class DemoJobService {
public void demoTest(String s1){
System.out.println("==============" + s1);
}
}
?。?)handler
此處注解非常重要。
package com.example.demo.handler;
import com.example.demo.service.DemoJobService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@JobHandler(value = "demoHandler")
@Component
@Slf4j
@RequiredArgsConstructor
public class DemoHandler extends IJobHandler {
private final DemoJobService demoJobService;
@Override
public ReturnT<String> execute(String s1) throws Exception {
XxlJobLogger.log("xxl-job測試任務開始執(zhí)行?!綼rgs: {}】", s1);
try {
demoJobService.demoTest(s1);
XxlJobLogger.log("xxl-job測試任務執(zhí)行結束。");
return SUCCESS;
} catch (Exception e) {
XxlJobLogger.log("xxl-job測試任務執(zhí)行出錯!", e);
return FAIL;
}
}
}
至此,使用xxl-job的項目配置處理完畢。
三、定時任務執(zhí)行配置
1、執(zhí)行器配置
登陸xxl-job控制臺后,點擊執(zhí)行器管理------新增執(zhí)行器。
執(zhí)行器中內容:
AppName:在使用xxl-job項目中配置的appname(見第二步中的第2點)
名稱:隨便填寫(由于可能會多個項目同時使用xxl-job,因此建議一個項目一個執(zhí)行器,且執(zhí)行器名稱直接可以看出是哪個項目)
排序:1
注冊方式:自動注入
機器地址:空(xxl-job會自動掃描識別地址)
2、定時任務配置
任務管理---新增
任務中內容:
執(zhí)行器:選擇指定的執(zhí)行器
任務描述:定時任務的名稱
路由策略:可以根據自己的需要選擇(一般選擇輪詢)
FIRST(第一個):固定選擇第一個機器
LAST(最后一個):固定選擇最后一個機器
ROUND(輪詢):輪詢執(zhí)行
RANDOM(隨機):隨機選擇在線的機器;
CONSISTENT_HASH(一致性HASH):每個任務按照Hash算法固定選擇某一臺機器,且所有任務均勻散列在不同機器上。
LEAST_FREQUENTLY_USED(最不經常使用):使用頻率最低的機器優(yōu)先被選舉;
LEAST_RECENTLY_USED(最近最久未使用):最久為使用的機器優(yōu)先被選舉
FAILOVER(故障轉移):按照順序依次進行心跳檢測,第一個心跳檢測成功的機器選定為目標執(zhí)行器并發(fā)起調度;
BUSYOVER(忙碌轉移):按照順序依次進行空閑檢測,第一個空閑檢測成功的機器選定為目標執(zhí)行器并發(fā)起調度;
SHARDING_BROADCAST(分片廣播):廣播觸發(fā)對應集群中所有機器執(zhí)行一次任務,同時系統(tǒng)自動傳遞分片參數;可根據分片參數開發(fā)分片任務;
Cron:定時任務執(zhí)行時間(此處測試是每秒執(zhí)行一次,所以配置的* * * * * ?)
運行模式:可根據自己需要選擇(一般選擇BEGAN)
BEAN模式:任務以JobHandler方式維護在執(zhí)行器端;需要結合 "JobHandler" 屬性匹配執(zhí)行器中任務;
GLUE模式(Java):任務以源碼方式維護在調度中心;該模式的任務實際上是一段繼承自IJobHandler的Java類代碼并 "groovy" 源碼方式維護,它在執(zhí)行器項目中運行,可使用@Resource/@Autowire注入執(zhí)行器里中的其他服務;
GLUE模式(Shell):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "shell" 腳本;
GLUE模式(Python):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "python" 腳本;
GLUE模式(PHP):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "php" 腳本;
GLUE模式(NodeJS):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "nodejs" 腳本;
GLUE模式(PowerShell):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "PowerShell" 腳本;
jobHandler:定時任務中@JobHandler注解中的配置
阻塞處理策略:根據自己需要選擇(一般選擇單機串行)
單機串行(默認):調度請求進入單機執(zhí)行器后,調度請求進入FIFO隊列并以串行方式運行;
棄后續(xù)調度:調度請求進入單機執(zhí)行器后,發(fā)現執(zhí)行器存在運行的調度任務,本次請求將會被丟棄并標記為失敗;
覆蓋之前調度:調度請求進入單機執(zhí)行器后,發(fā)現執(zhí)行器存在運行的調度任務,將會終止運行中的調度任務并清空隊列,然后運行本地調度任務;
子任務ID:每個任務都擁有一個唯一的任務ID(任務ID可以從任務列表獲取),當本任務執(zhí)行結束并且執(zhí)行成功時,將會觸發(fā)子任務ID所對應的任務的一次主動調度。一般為空。
任務超時時間:支持自定義任務超時時間,任務運行超時將會主動中斷任務
失敗重試次數;支持自定義任務失敗重試次數,當任務失敗時將會按照預設的失敗重試次數主動進行重試;
報警郵件:任務調度失敗時郵件通知的郵箱地址,支持配置多郵箱地址,配置多個郵箱地址時用逗號分隔;
負責人:任務的負責人
執(zhí)行參數:任務執(zhí)行所需的參數,多個參數時用逗號分隔,任務執(zhí)行時將會把多個參數轉換成數組傳入;
3、測試
點擊操作,執(zhí)行一次,然后查看日志,看是否執(zhí)行成功
此處顯示執(zhí)行成功,然后可以在操作按鈕下正式啟動定時任務。
開啟定時任務后,可見后臺在持續(xù)執(zhí)行(按照配置的一秒輸出一次)
校驗失敗通知和重試次數:
在實現類中添加代碼:int k = 10/0;
查看執(zhí)行日志,失敗了6次(原因是調度平臺配置了失敗后重試5次)
在看調度平臺中配置的異常警告郵件,也是有6次告警。這里可以將異常拋出,并在告警郵件中展示。
四、在docker上部署xxl-job
1、打包xxl-job-admin
2、在服務器中創(chuàng)建xxl-job文件夾:mkdir /usr/data/xxl-job
3、進入新創(chuàng)建的xxl-job文件夾,新建一個dockerfile文件,編輯文件
# Docker image for springboot file run # VERSION 0.0.1 # Author: eangulee # 基礎鏡像使用java FROM java:8 # 作者 MAINTAINER lcl <liconglong@163.com> # VOLUME 指定了臨時文件目錄為/tmp。 # 其效果是在主機 /var/lib/docker 目錄下創(chuàng)建了一個臨時文件,并鏈接到容器的/tmp VOLUME /tmp # 將jar包添加到容器中并更名為app.jar,此處的jar包名稱一定要與要部署的jar包名稱一致 ADD xxl-job-admin-2.1.1-SNAPSHOT.jar app.jar # 運行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
命令詳解:
FROM:基礎鏡像名稱
MAINTAINER:作者信息
VOLUME:數據掛載
ADD:項目的 jar 文件作為 “app.jar” 添加到容器的 ENTRYPOINT 執(zhí)行項目 app.jar
ENTRYPOINT:指定容器啟動時需要執(zhí)行的命令(為了縮短 Tomcat 啟動時間,添加一個系統(tǒng)屬性指向 “/dev/./urandom” 作為 Entropy Source 如果是第一次打包,它會自動下載java 8的鏡像作為基礎鏡像,以后再制作鏡像的時候就不會再下載了)
4、將xxl-job-admin.jar上傳至xxl-job文件夾
5、構建新的鏡像
docker build -t xxl-job-admin . (后面的.一定不要遺漏)
6、使用xxl-job-admin鏡像啟動新容器
docker run -d -p 8081:8081 xxl-job-admin
-d:后臺運行
-p:端口映射
7、驗證
http://ip:8081/xxl-job-admin
五、調整項目配置
更改第二步第2點中的xxl-job地址
六、按照第三步重新配置定時任務即可。
總結
以上是生活随笔為你收集整理的xxl-job搭建、部署、SpringBoot集成xxl-job的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: on duplicate key upd
- 下一篇: 无法通过sak判断卡片类型_不同类型人脸