日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xxl-job介绍与使用

發(fā)布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xxl-job介绍与使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

XXL-JOB

  • 1.概述
  • 2.文檔
  • 3.環(huán)境
  • 4.架構(gòu)
  • 5.部署
    • 5.1初始化調(diào)度數(shù)據(jù)庫
    • 5.2編譯源碼
    • 5.3配置部署調(diào)度中心
      • 5.3.1配置部署調(diào)度中心
    • 5.4 部署項目
  • 6.springboot引入xxl-job
    • 6.1配置maven
    • 6.2配置application.yml
    • 6.3新增config配置類
    • 6.4業(yè)務(wù)案例
    • 6.5在任務(wù)調(diào)度配置
  • 7關(guān)于分片或者其他問題

1.概述

XXL-JOB是一個分布式任務(wù)調(diào)度平臺,其核心設(shè)計目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴展。現(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用。

2.文檔

  • github地址
  • 中文文檔

3.環(huán)境

  • Maven3+
  • Jdk1.8+
  • Mysql5.7+

4.架構(gòu)

5.部署

5.1初始化調(diào)度數(shù)據(jù)庫

請下載項目源碼并解壓,獲取 “調(diào)度數(shù)據(jù)庫初始化SQL腳本” 并執(zhí)行即可。 “調(diào)度數(shù)據(jù)庫初始化SQL腳本” 位置為:
/xxl-job/doc/db/tables_xxl_job.sql

5.2編譯源碼

解壓源碼,按照maven格式將源碼導(dǎo)入IDE, 使用maven進行編譯即可,源碼結(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:無框架版本;

5.3配置部署調(diào)度中心

調(diào)度中心項目:xxl-job-admin
作用:統(tǒng)一管理任務(wù)調(diào)度平臺上調(diào)度任務(wù),負(fù)責(zé)觸發(fā)調(diào)度執(zhí)行,并且提供任務(wù)管理平臺。

5.3.1配置部署調(diào)度中心

調(diào)度中心配置文件地址:

/xxl-job/xxl-job-admin/src/main/resources/application.properties

調(diào)度中心配置內(nèi)容說明:

### 調(diào)度中心JDBC鏈接:鏈接地址請保持和 2.1章節(jié) 所創(chuàng)建的調(diào)度數(shù)據(jù)庫的地址一致 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_pwd spring.datasource.driver-class-name=com.mysql.jdbc.Driver### 報警郵箱 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### 調(diào)度中心通訊TOKEN [選填]:非空時啟用; xxl.job.accessToken=### 調(diào)度中心國際化配置 [必填]: 默認(rèn)為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文; xxl.job.i18n=zh_CN## 調(diào)度線程池最大線程配置【必填】 xxl.job.triggerpool.fast.max=200 xxl.job.triggerpool.slow.max=100### 調(diào)度中心日志表數(shù)據(jù)保存天數(shù) [必填]:過期日志自動清理;限制大于等于7時生效,否則, 如-1,關(guān)閉自動清理功能; xxl.job.logretentiondays=30

5.4 部署項目

如果已經(jīng)正確進行上述配置,可將項目編譯打包部署。

調(diào)度中心訪問地址:http://localhost:8080/xxl-job-admin (該地址執(zhí)行器將會使用到,作為回調(diào)地址)

默認(rèn)登錄賬號 “admin/123456”

6.springboot引入xxl-job

6.1配置maven

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${project.parent.version}</version> </dependency>

6.2配置application.yml

# web port server.port=8081 # no web #spring.main.web-environment=false# log config logging.config=classpath:logback.xml### xxl-job admin address list, such as "http://address" or "http://address01,http://address02" xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin### xxl-job, access token xxl.job.accessToken=default_token### xxl-job executor appname xxl.job.executor.appname=xxl-job-executor-sample ### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null xxl.job.executor.address= ### xxl-job executor server-info xxl.job.executor.ip= xxl.job.executor.port=9999 ### xxl-job executor log-path xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler ### xxl-job executor log-retention-days xxl.job.executor.logretentiondays=30

6.3新增config配置類

package com.xxl.job.executor.core.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** xxl-job config** @author xuxueli 2017-04-28*/ @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;@Beanpublic 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();*/}

6.4業(yè)務(wù)案例

/*** 1、簡單任務(wù)示例(Bean模式)*/@XxlJob("demoJobHandler")public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");for (int i = 0; i < 5; i++) {XxlJobHelper.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}// default success}/*** 2、分片廣播任務(wù) 用于執(zhí)行大批量任務(wù),進行分片分擔(dān)壓力*/@XxlJob("shardingJobHandler")public void shardingJobHandler() throws Exception {// 分片參數(shù)int shardIndex = XxlJobHelper.getShardIndex();int shardTotal = XxlJobHelper.getShardTotal();XxlJobHelper.log("分片參數(shù):當(dāng)前分片序號 = {}, 總分片數(shù) = {}", shardIndex, shardTotal);// 業(yè)務(wù)邏輯for (int i = 0; i < shardTotal; i++) {if (i == shardIndex) {XxlJobHelper.log("第 {} 片, 命中分片開始處理", i);} else {XxlJobHelper.log("第 {} 片, 忽略", i);}}}/*** 3、命令行任務(wù) 一般用于定時清楚日志,重啟服務(wù)*/@XxlJob("commandJobHandler")public void commandJobHandler() throws Exception {String command = XxlJobHelper.getJobParam();int exitValue = -1;BufferedReader bufferedReader = null;try {// command processProcessBuilder processBuilder = new ProcessBuilder();processBuilder.command(command);processBuilder.redirectErrorStream(true);Process process = processBuilder.start();//Process process = Runtime.getRuntime().exec(command);BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));// command logString line;while ((line = bufferedReader.readLine()) != null) {XxlJobHelper.log(line);}// command exitprocess.waitFor();exitValue = process.exitValue();} catch (Exception e) {XxlJobHelper.log(e);} finally {if (bufferedReader != null) {bufferedReader.close();}}if (exitValue == 0) {// default success} else {XxlJobHelper.handleFail("command exit value("+exitValue+") is failed");}}/*** 4、跨平臺Http任務(wù) * 參數(shù)示例:* "url: http://www.baidu.com\n" +* "method: get\n" +* "data: content\n";*/@XxlJob("httpJobHandler")public void httpJobHandler() throws Exception {// param parseString param = XxlJobHelper.getJobParam();if (param==null || param.trim().length()==0) {XxlJobHelper.log("param["+ param +"] invalid.");XxlJobHelper.handleFail();return;}String[] httpParams = param.split("\n");String url = null;String method = null;String data = null;for (String httpParam: httpParams) {if (httpParam.startsWith("url:")) {url = httpParam.substring(httpParam.indexOf("url:") + 4).trim();}if (httpParam.startsWith("method:")) {method = httpParam.substring(httpParam.indexOf("method:") + 7).trim().toUpperCase();}if (httpParam.startsWith("data:")) {data = httpParam.substring(httpParam.indexOf("data:") + 5).trim();}}// param validif (url==null || url.trim().length()==0) {XxlJobHelper.log("url["+ url +"] invalid.");XxlJobHelper.handleFail();return;}if (method==null || !Arrays.asList("GET", "POST").contains(method)) {XxlJobHelper.log("method["+ method +"] invalid.");XxlJobHelper.handleFail();return;}boolean isPostMethod = method.equals("POST");// requestHttpURLConnection connection = null;BufferedReader bufferedReader = null;try {// connectionURL realUrl = new URL(url);connection = (HttpURLConnection) realUrl.openConnection();// connection settingconnection.setRequestMethod(method);connection.setDoOutput(isPostMethod);connection.setDoInput(true);connection.setUseCaches(false);connection.setReadTimeout(5 * 1000);connection.setConnectTimeout(3 * 1000);connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8");// do connectionconnection.connect();// dataif (isPostMethod && data!=null && data.trim().length()>0) {DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());dataOutputStream.write(data.getBytes("UTF-8"));dataOutputStream.flush();dataOutputStream.close();}// valid StatusCodeint statusCode = connection.getResponseCode();if (statusCode != 200) {throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");}// resultbufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));StringBuilder result = new StringBuilder();String line;while ((line = bufferedReader.readLine()) != null) {result.append(line);}String responseMsg = result.toString();XxlJobHelper.log(responseMsg);return;} catch (Exception e) {XxlJobHelper.log(e);XxlJobHelper.handleFail();return;} finally {try {if (bufferedReader != null) {bufferedReader.close();}if (connection != null) {connection.disconnect();}} catch (Exception e2) {XxlJobHelper.log(e2);}}}/*** 5、生命周期任務(wù)示例:任務(wù)初始化與銷毀時,支持自定義相關(guān)邏輯;*/@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")public void demoJobHandler2() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");}public void init(){logger.info("init");}public void destroy(){logger.info("destroy");}

6.5在任務(wù)調(diào)度配置

登錄xxl-job 管理后臺
配置任務(wù)調(diào)度策略,你的定時任務(wù)就開始執(zhí)行了

7關(guān)于分片或者其他問題

大家可以看一下官網(wǎng)或者代碼都有樣例,這里不在詳細(xì)說明

總結(jié)

以上是生活随笔為你收集整理的xxl-job介绍与使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人久久 | 日韩美女一区 | 高清乱码毛片 | 日本激情视频 | 国产精品午夜福利 | 日韩欧美视频一区 | 波多野结衣啪啪 | 国产尤物av尤物在线看 | 激情综合婷婷 | 亚洲精品福利在线 | 高潮疯狂过瘾粗话对白 | 青青免费视频 | 日韩精品中字 | 日本一区二区在线播放 | 日韩男女视频 | 深夜福利电影 | 黄色日韩 | 国产免费久久久 | 亚洲高清在线免费观看 | 亚洲乱码国产乱码精品精 | 日韩精品一区二区在线视频 | 日本一区二区在线 | 天天射日日操 | bbbbbbbbb毛片大片按摩 | 最新av中文字幕 | а√天堂资源官网在线资源 | 天堂av免费看 | 国产精品美女久久 | 另类一区二区 | 少妇2做爰bd在线意大利堕落 | 亚洲男人的天堂在线 | 国产在线最新 | 日韩亚洲国产精品 | 久久91亚洲| 26uuu国产精品视频 | 久草综合在线观看 | 国产精品美女一区二区三区 | 伊人98| 成人a站 | 伊人开心网| 玖玖视频网| 顶臀精品视频www | 日本人添下边视频免费 | 久久h视频| 精品69| 国产一区二区在线精品 | 国产午夜精品视频 | 欧美破处大片 | 日韩淫片 | 亚洲成色网| 最新毛片基地 | 免费一级suv好看的国产网站 | 日韩精品久久久久久久的张开腿让 | 免费无遮挡网站 | 免费黄色大片网站 | 久久久青草 | 欧美一二三区 | 成人精品一区日本无码网 | 欧美日韩成人在线观看 | 五月天福利视频 | 日韩小视频在线 | 影音先锋男人天堂 | 91一区二区国产 | 国产精品国产三级国产aⅴ下载 | 国产午夜一区二区 | 狠狠干2018 | 91老肥熟| 中文字幕日韩精品无码内射 | 宅男的天堂 | 久久久精品美女 | 亚洲精品在线一区二区 | 日韩欧美91| 精品久久电影 | 国产激情在线视频 | 一级黄色伦理片 | 成人免费无码大片a毛片 | 荒野求生21天去码版网站 | 欧美成人吸奶水做爰 | 九九久久99 | heyzo在线播放 | 国产又黄又粗又爽 | 日本黄色大片免费看 | 亚洲国产精品视频在线观看 | 美女在线观看www | 黄色av资源 | a视频免费在线观看 | 国产福利影院 | 亚洲不卡在线观看 | 久久亚洲av午夜福利精品一区 | 丰满少妇一区二区三区 | 国产精品久久久久蜜臀 | 国产中文字幕在线播放 | 日本免费在线观看视频 | 国产同性人妖ts口直男 | 中国字幕一色哟哟 | av成人在线电影 | 99精品视频播放 | 饥渴少妇色诱水电工 | 性欧美xxxx|