<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你實(shí)現(xiàn)xxl-job分布式任務(wù)調(diào)度平臺(tái)搭建

          共 3799字,需瀏覽 8分鐘

           ·

          2020-09-21 17:12

          程序員的成長(zhǎng)之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
          關(guān)注


          閱讀本文大概需要 4.5 分鐘。

          編輯:業(yè)余草

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

          最近有網(wǎng)友咨詢我 xxl-job 相關(guān)的問題,我認(rèn)為官方文檔已經(jīng)寫的非常詳細(xì)了,這里我再給大家寫一個(gè)入門級(jí)的 3 分鐘實(shí)戰(zhàn) demo,希望能夠幫助到更多的“新手用戶”。
          首先我們需要先下載 xxl-job 的源碼,下載地址:github:https://github.com/xuxueli/xxl-job。我這里下載使用的是 2.1.2 版本,下載完成后解壓,然后使用 IDEA 的Import Project 導(dǎo)入到 IDE 中,注意使用 Maven 方式導(dǎo)入。
          將上圖目錄下的 sql 文件放入 mysql 中執(zhí)行,執(zhí)行完成之后會(huì)生成如下 8 張表。
          然后我們需要修改 xxl-job-admin 工程下的 application.properties 配置文件。
          主要修改的就是數(shù)據(jù)庫(kù)連接屬性,需要跟上面創(chuàng)建數(shù)據(jù)庫(kù)表的數(shù)據(jù)庫(kù)連接信息一致。

          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

          配置文件修改完畢之后,因?yàn)槭且粋€(gè) SpringBoot 項(xiàng)目,不需要再打成 war 包放入 tomcat 這種操作了,就可以直接啟動(dòng) xxl-job-admin 的啟動(dòng)類。
          成功啟動(dòng)之后,如果沒有修改 application.properties 配置文件中的端口號(hào)和路徑的話,直接打開?http://localhost:8080/xxl-job-admin?就能看到 xxl-job-admin 的監(jiān)控平臺(tái)了,默認(rèn)用戶名 admin,密碼 123456。
          到這里 xxl-job-admin 就搭建完成了,接下來我們寫一個(gè) demo,demo 中的代碼均參考自官方網(wǎng)站?https://www.xuxueli.com/xxl-job/,有興趣的同學(xué)可以自行查閱 項(xiàng)目結(jié)構(gòu)如下:
          首先導(dǎo)入 pom 依賴。


          ????com.xuxueli
          ????xxl-job-core
          ????2.1.2

          同樣的需要修改配置文件 application.properties。

          #?web?port
          server.port=8081

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

          ###?調(diào)度中心部署跟地址?[選填]:如調(diào)度中心集群部署存在多個(gè)地址則用逗號(hào)分隔。執(zhí)行器將會(huì)使用該地址進(jìn)行"執(zhí)行器心跳注冊(cè)"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動(dòng)注冊(cè);
          xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
          ###?執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊(cè)分組依據(jù);為空則關(guān)閉自動(dòng)注冊(cè)
          xxl.job.executor.appname=xxl-job-executor-sample
          ###?執(zhí)行器IP [選填]:默認(rèn)為空表示自動(dòng)獲取IP,多網(wǎng)卡時(shí)可手動(dòng)設(shè)置指定IP,該IP不會(huì)綁定Host僅作為通訊實(shí)用;地址信息用于?"執(zhí)行器注冊(cè)"?和?"調(diào)度中心請(qǐng)求并觸發(fā)任務(wù)";
          xxl.job.executor.ip=
          ###?執(zhí)行器端口號(hào)?[選填]:小于等于0則自動(dòng)獲取;默認(rèn)端口為9999,單機(jī)部署多個(gè)執(zhí)行器時(shí),注意要配置不同執(zhí)行器端口;
          xxl.job.executor.port=9999
          ###?執(zhí)行器通訊TOKEN [選填]:非空時(shí)啟用;
          xxl.job.accessToken=
          ###?執(zhí)行器運(yùn)行日志文件存儲(chǔ)磁盤路徑?[選填]?:需要對(duì)該路徑擁有讀寫權(quán)限;為空則使用默認(rèn)路徑;
          xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
          ###?執(zhí)行器日志文件保存天數(shù)?[選填]?:?過期日志自動(dòng)清理, 限制值大于等于3時(shí)生效;?否則, 如-1, 關(guān)閉自動(dòng)清理功能;
          xxl.job.executor.logretentiondays=30

          添加 logback.xml。


          <configuration?debug="false"?scan="true"?scanPeriod="1?seconds">
          ????<contextName>logbackcontextName>
          ????<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%npattern>
          ????????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}.zipfileNamePattern>
          ????????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;
          ????}
          }

          最后是需要定時(shí)執(zhí)行的任務(wù)邏輯,在 2.1.2 版本中,由原來基于 JobHandler 類任務(wù)開發(fā)方式,優(yōu)化為支持基于方法的任務(wù)開發(fā)方式;因此,可以支持單個(gè)類中開發(fā)多個(gè)任務(wù)方法,進(jìn)行類復(fù)用。

          @Component
          public?class?DemoXxxlJob?{
          ????@XxlJob("demoJobHandler")
          ????public?ReturnT?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;
          ????}
          }

          上面的代碼使用的是簡(jiǎn)單任務(wù)示例(Bean 模式),還支持分片廣播任務(wù)、命令行任務(wù)、跨平臺(tái) Http 任務(wù)、生命周期任務(wù),任務(wù)初始化與銷毀時(shí),支持自定義相關(guān)邏輯;可根據(jù)自己的需要選擇,在源碼中的 xxl-job-executor-sample-springboot 都有相應(yīng)的示例可供參考。
          一切準(zhǔn)備就緒之后,我們就可以在 xxl-job-admin 上建立執(zhí)行器了。
          新增任務(wù)。
          選擇你的操作。
          執(zhí)行完成后可查看調(diào)度日志。
          日志詳情。
          到這里整個(gè)項(xiàng)目就搭建完成了,整個(gè) demo 非常簡(jiǎn)單。很多人就是因?yàn)闆]用過 xxl-job,所以非常懼怕,等你認(rèn)真翻一遍官網(wǎng),動(dòng)手再實(shí)踐一遍,最終發(fā)現(xiàn) xxl-job 是如此的簡(jiǎn)單!
          推薦閱讀:
          Windows給力!可以扔掉Linux虛擬機(jī)了!
          22圖詳解ElasticSearch 使用教程
          2T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「2048」,即可免費(fèi)獲取!!

          微信掃描二維碼,關(guān)注我的公眾號(hào)

          朕已閱?

          瀏覽 61
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产乱伦高清视频免费看 | 一 级毛片韩 | 无码一区二区三区线我 | AAA高清毛片 | 成人污视频在线观看 |