依赖jar包
引入包 |
版本 |
jdk |
1.8 |
spring boot |
2.7.2 |
xxl-job-core |
2.3.1 |
allbs-common |
2.0.0 |
使用
添加依赖
1 2 3 4 5
| <dependency> <groupId>cn.allbs</groupId> <artifactId>allbs-xxl-job</artifactId> <version>2.0.1</version> </dependency>
|
1
| implementation 'cn.allbs:allbs-xxl-job:2.0.1'
|
1
| implementation("cn.allbs:allbs-xxl-job:2.0.1")
|
启动xxl-job调度中心
配置需要调度动态定时任务的服务
启动类添加注解@EnableXxlJob 开启动态定时任务
添加配置或者只添加环境变量,环境 变量如下图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| xxl: job: admin: address: http://${XXL_JOB_SERVER_HOST:xxl-job-server-host}:${XXL_JOB_SERVER_PORT:8080}/${XXL_JOB_CONTEXT_PATH:xxl-job-admin}/ username: ${XXL_JOB_SERVER_USERNAME:admin} password: ${XXL_JOB_SERVER_PASSWORD:123456} executor: appname: ${XXL_JOB_EXECUTOR:xxl-job-executor-client} port: ${XXL_JOB_CLIENT_PORT:9001} logpath: ${XXL_JOB_LOG_PATH:/data/applogs/xxl-job/} access-token: ${XXL_JOB_ACCESS_TOKEN:default_token} auto-register: ${XXL_JOB_EXECUTOR_AUTO:0} manual-address-list: - http://127.0.0.1:9999
|
yml实际配置示例
注意点
想要成功注册必须满足以下条件,否则会出现xxl-job registry fail
- xxl-job调度中心如果设置了content-path,则客户端必须添加该字符串,即xxl.job.admin.address中的内容
- xxl-job rpc接口调用中url拼接默认没有斜杠,所以必须在content-path之后添加斜杠
- 如果xxl-job调度中心配置了accessToken则客户端也需要配置
示例
添加环境变量
环境变量名称 |
默认值 |
说明 |
XXL_JOB_SERVER_HOST |
xxl-job-server-host |
调度中心的ip,如果使用默认则需在hosts中配置对呀的ip |
XXL_JOB_SERVER_PORT |
8080 |
调度中心ip |
XXL_JOB_SERVER_USERNAME |
admin |
自动注册时使用的账号 |
XXL_JOB_SERVER_PASSWORD |
123456 |
自动注册时使用的密码 |
XXL_JOB_CONTEXT_PATH |
xxl-job-admin |
调度中心content-path |
XXL_JOB_EXECUTOR |
xxl-job-executor-client |
执行器名称 |
XXL_JOB_CLIENT_PORT |
9001 |
客户端端口,目前会导致多个客户端端口冲突,后续优化 |
XXL_JOB_LOG_PATH |
/data/applogs/xxl-job/ |
日志保存路径 |
XXL_JOB_ACCESS_TOKEN |
default_token |
调度中心配置的accessToken |
XXL_JOB_EXECUTOR_AUTO |
0 |
是否自动注册 0为自动注册, 1为手动注册 |
manual-address-list |
http://127.0.0.1:9999,http://127.0.0.1:8888 |
手动注册列表 以逗号分隔 |
普通使用,需要在服务端的管理页面中手动注册和启动
1 2 3 4 5 6 7 8 9 10
| @Slf4j @Component public class DemoJob { @XxlJob("demoJobHandler") public ReturnT<String> demoJobHandler(String s) { XxlJobHelper.log("This is a demo job." + XxlJobHelper.getShardIndex()); return SUCCESS; } }
|
手动注册启动
自动注册和使用(参考文章)
需要自动注册的方法需要添加@XxlJobAuto
注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import cn.allbs.job.annotation.XxlJobAuto; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Slf4j @Component public class DemoJob {
@XxlJob("demoJobHandler") @XxlJobAuto(jobDesc = "根据cron指定频率运行, 自动注册后不启动", cron = "* * 0/1 * * ? ", author = "chenqi") public ReturnT<String> demoJobHandler(String s) { XxlJobHelper.log("This is a demo job." + XxlJobHelper.getShardIndex());
return ReturnT.SUCCESS; }
@XxlJob("demoJobHandlerAuto") @XxlJobAuto(jobDesc = "固定速度测试,注册后自动启动", author = "chenqi", scheduleConf = 1, timeUnit = TimeUnit.MINUTES, triggerStatus = 1) public ReturnT<String> demoJobHandlerAuto(String s) { XxlJobHelper.log("This is a demo job." + XxlJobHelper.getShardIndex()); return ReturnT.SUCCESS; }
@XxlJob("demo") public ReturnT<String> demo(String s) { XxlJobHelper.log("This is a demo job." + XxlJobHelper.getShardIndex()); return ReturnT.SUCCESS; }
}
|
注解可配置项
字段名称 |
默认值 |
说明 |
jobDesc |
|
任务描述(必填项) |
author |
|
负责人(必填项) |
alarmEmail |
|
报警邮件,多个以逗号分隔 |
cron |
|
cron 表达式(当此项为空时则执行固定频率,如果不为空优先固定频率使用该配置) |
executorParam |
|
执行器任务参数 |
executorFailRetryCount |
0 |
失败重试次数 |
executorTimeout |
0 |
执行超时时间 |
misfireStrategy |
DO_NOTHING |
调度过期策略(忽略: DO_NOTHING 立即执行一次: FIRE_ONCE_NOW) |
executorRouteStrategy |
FIRST |
执行器路由策略 FIRST:第一个 LAST:最后一个 ROUND:轮询 RANDOM:随机 CONSISTENT_HASH:一致性HASH LEAST_FREQUENTLY_USED:最不经常使用 LEAST_RECENTLY_USED:最近最久未使用 FAILOVER:故障转移 BUSYOVER:忙碌转移 SHARDING_BROADCAST:分片广播 |
triggerStatus |
0 |
调度状态 0 停止 1运行 |
scheduleConf |
1 |
固定速度调用时调用值 如果cron为空时使用此配置 |
timeUnit |
TimeUnit.SECONDS |
固定速度时调用速度的单位, 默认为秒 |
使用效果