xxl-job 项目启动后自动注册执行器、方法并启动
依赖jar包
引入包 | 版本 |
---|---|
jdk | 1.8 |
spring boot | 2.7.2 |
xxl-job-core | 2.3.1 |
allbs-common | 2.0.0 |
使用
添加依赖
<dependency>
<groupId>cn.allbs</groupId>
<artifactId>allbs-xxl-job</artifactId>
<version>2.0.1</version>
</dependency>
implementation 'cn.allbs:allbs-xxl-job:2.0.1'
implementation("cn.allbs:allbs-xxl-job:2.0.1")
启动xxl-job调度中心
配置需要调度动态定时任务的服务
启动类添加注解@EnableXxlJob 开启动态定时任务
添加配置或者只添加环境变量,环境 变量如下图
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:
# 执行器名称,如果为空则使用项目的application名称
appname: ${XXL_JOB_EXECUTOR:xxl-job-executor-client}
# 执行器端口
port: ${XXL_JOB_CLIENT_PORT:9001}
# 日志路径
logpath: ${XXL_JOB_LOG_PATH:/data/applogs/xxl-job/}
# token
access-token: ${XXL_JOB_ACCESS_TOKEN:default_token}
# 是否自动注册 0为自动注册, 1为手动注册
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 | 手动注册列表 以逗号分隔 |
普通使用,需要在服务端的管理页面中手动注册和启动
@Slf4j
@Component
public class DemoJob {
// 这个注解中的内容就是jobHandler
@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String s) {
XxlJobHelper.log("This is a demo job." + XxlJobHelper.getShardIndex());
return SUCCESS;
}
}
手动注册启动
自动注册和使用(参考文章)
需要自动注册的方法需要添加@XxlJobAuto
注解
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;
/**
* @author ChenQi
*/
@Slf4j
@Component
public class DemoJob {
/**
* 使用cron,不自动启动的情况
* @param s
* @return
*/
@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;
}
/**
* 使用固定频率,注册后自动启动的情况
* @param s
* @return
*/
@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;
}
/**
* 不自动注册,需要手动到管理中心手动注册的情况
* @param s
* @return
*/
@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 | 固定速度时调用速度的单位, 默认为秒 |
使用效果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ALLBS!
评论