XXL-JOB是一個分散式任務排程平台,其核心設計目標是開發快速、學習簡單、輕量、易擴充。現已開放原始碼並接入多家公司線上產品線,開箱即用。
為什麼要使用分散式任務調度呢?無論是針對分散式專案或nginx負載平衡,傳統的定時任務實作方式都很慢滿足,例如
#https://github.com /xuxueli/xxl-job | Download |
---|---|
http://gitee.com/xuxueli0323/xxl-job | #Download |
#2.2 定時任務實現步驟1.在資料庫中執行專案中的sql腳本 2.目錄結構說明
3.修改調度中心設定檔 xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") # 調度中心國際化配置[必填]: 預設為"zh_CN"/中文簡體, 可選範圍為"zh_CN"/中文簡體, " zh_TC"/中文繁體and "en"/英文; xxl.job.i18n=zh_CN## xxl-job, triggerpool max size# 調度執行緒池最大執行緒設定【必填】 xxl.job.triggerpool.fast.max=200xxl.job.triggerpool.slow.max=100 ## xxl-job, log retention days#調度中心日誌表資料保存天數[必填]:過期日誌自動清理;限制大於等於7時生效,否則, 如-1,關閉自動清理功能; xxl.job.logretentiondays=30
調度中心存取位址:http://localhost:8080/xxl-job-admin (此位址執行器將會使用到,作為回調位址) #5 .新增執行器 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.執行定時任務進行測試 查看調度日誌 #3.SpringBoot整合XxlJob#3.1 建立SpringBoot工程引入依賴<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${稳定版}</version> </dependency> 登入後複製 3.2 編寫properties設定檔
#注意,在調度中心建立任務時,appname和執行器配置的appname必須保持一致;執行器的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; } /** * 针对多网卡、容器内部署等情况,可借助 "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定时任务。。。。"); } } 登入後複製 建立執行器 #建立任務 ## 查看后台执行日志 如果需要xxlJob邮件报警功能,则需要在xxl-job-admin中进行配置邮件信息,并在创建任务时指定配置的邮箱地址
ps:如果定时任务执行频率很高,频繁失败的话,那收邮件就是一个噩梦~ 4.XxlJob部署4.1 jar包部署方式jar包部署的方式比较简单,将项目编译打包部署到服务器上,其他服务和xxljob调度器之间网络、接口相通即可 4.2 Docker 镜像方式搭建调度中心下载镜像 # Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建议指定版本号) docker pull xuxueli/xxl-job-admin # 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value --key2=value2" ; # 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties # 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 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分散式任務調度平台的詳細內容。更多資訊請關注PHP中文網其他相關文章!