手把手教你實現(xiàn)xxl-job分布式任務(wù)調(diào)度平臺搭建
閱讀本文大概需要 4.5 分鐘。
編輯:業(yè)余草
推薦:https://www.xttblog.com/?p=5097
github:https://github.com/xuxueli/xxl-job。我這里下載使用的是 2.1.2 版本,下載完成后解壓,然后使用 IDEA 的Import Project 導(dǎo)入到 IDE 中,注意使用 Maven 方式導(dǎo)入。


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

http://localhost:8080/xxl-job-admin?就能看到 xxl-job-admin 的監(jiān)控平臺了,默認(rèn)用戶名 admin,密碼 123456。
https://www.xuxueli.com/xxl-job/,有興趣的同學(xué)可以自行查閱 項目結(jié)構(gòu)如下:
????com.xuxueli
????xxl-job-core
????2.1.2
#?web?port
server.port=8081
#?log?config
logging.config=classpath:logback.xml
###?調(diào)度中心部署跟地址?[選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔。執(zhí)行器將會使用該地址進(jìn)行"執(zhí)行器心跳注冊"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
###?執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關(guān)閉自動注冊
xxl.job.executor.appname=xxl-job-executor-sample
###?執(zhí)行器IP [選填]:默認(rèn)為空表示自動獲取IP,多網(wǎng)卡時可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于?"執(zhí)行器注冊"?和?"調(diào)度中心請求并觸發(fā)任務(wù)";
xxl.job.executor.ip=
###?執(zhí)行器端口號?[選填]:小于等于0則自動獲?。荒J(rèn)端口為9999,單機(jī)部署多個執(zhí)行器時,注意要配置不同執(zhí)行器端口;
xxl.job.executor.port=9999
###?執(zhí)行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
###?執(zhí)行器運行日志文件存儲磁盤路徑?[選填]?:需要對該路徑擁有讀寫權(quán)限;為空則使用默認(rèn)路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
###?執(zhí)行器日志文件保存天數(shù)?[選填]?:?過期日志自動清理, 限制值大于等于3時生效;?否則, 如-1, 關(guān)閉自動清理功能;
xxl.job.executor.logretentiondays=30
<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>
@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;
????}
}
@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;
????}
}





微信掃描二維碼,關(guān)注我的公眾號
朕已閱?

