GLUE模式开关:新增GLUE模式开关(xxl.job.executor.glueenabled),支持执行器维度设置是否启用GLUE模式;

master
xuxueli 1 month ago
parent 3278e8ec99
commit 610adc8086

@ -1014,29 +1014,31 @@ xuxueli/xxl-job-admin:{指定版本}
执行器配置,配置内容说明:
```
### 调度中心部署根地址 [填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
### 调度中心部署根地址 [填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080
### 调度中心通讯TOKEN [选填]:非空时启用;
xxl.job.admin.accessToken=default_token
### 调度中心通讯超时时间[选填]单位秒默认3s
xxl.job.admin.timeout=3
### 执行器启用开关 [填]:默认开启,关闭时不进行执行器初始化;
### 执行器启用开关 [填]:默认开启,关闭时不进行执行器初始化;
xxl.job.executor.enabled=true
### 执行器AppName [填]:执行器心跳注册分组依据;为空则关闭自动注册
### 执行器AppName [填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]默认为空表示自动获取IP多网卡时可手动设置指定IP该IP不会绑定Host仅作为通讯使用地址信息用于 "执行器注册" 和 "调度中心请求并触发任务"
xxl.job.executor.ip=
### 执行器端口号 [选填]小于等于0则自动获取默认端口为9999单机部署多个执行器时注意要配置不同执行器端口
xxl.job.executor.port=9999
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
### 任务扫描排除路径 [选填] 任务扫描时忽略指定包路径下的Bean;支持配置包路径前缀,多个逗号分隔;
### 执行器任务扫描排除路径 [选填] Bean模式任务扫描时忽略指定包路径非空时生效;支持配置包路径前缀,多个逗号分隔;例如"org.package01"或"org.package01,org.package02"
xxl.job.executor.excludedpackage=org.springframework,spring
### 执行器GLUE模式启用开关 [选填] 默认开启支持全部类型任务关闭时只支持Bean模式任务、禁用GLUE模式任务
xxl.job.executor.glueenabled=true
```
#### 步骤三:执行器组件配置
@ -2900,12 +2902,12 @@ alter table xxl_job_log
- 3、【安全】任务RollingLog权限校验完善防止越权查看任务日志
### 7.47 版本 v3.5.0 Release Notes[ING]
- 1、【TODO】AccessToken线上化管理执行期维度限制操作当前执行期
- 2、【TODO】调度中心OpenAPI增强提供任务管理能力封装Agent Skill并推送ClawHub
- 3、【TODO】配置线上化:发送邮箱配置线上管理、线程池配置调整
- 4、【TODO】任务告警拆分“告警类型、告警配置”属性支持Webhook、邮箱多种方式
- 5、【TODO】任务说明:拆分“任务名称、任务描述”属性,前者用于任务检索,后者用于补充任务描述,如参数说明、功能详细介绍等。
- 6、【TODO】GLUE模式开关执行器新增GLUE模式配置支持任务维度启停满足差异化场景需求
- 1、【新增】GLUE模式开关新增GLUE模式开关xxl.job.executor.glueenabled支持执行器维度设置是否启用GLUE模式
- 2、【TODO】AccessToken线上化管理执行期维度限制操作当前执行期
- 3、【TODO】调度中心OpenAPI增强提供任务管理能力封装Agent Skill并推送ClawHub
- 4、【TODO】配置线上化:发送邮箱配置线上管理、线程池配置调整
- 5、【TODO】任务告警拆分“告警类型、告警配置”属性支持Webhook、邮箱多种方式
- 6、【TODO】任务说明:拆分“任务名称、任务描述”属性,前者用于任务检索,后者用于补充任务描述,如参数说明、功能详细介绍等。
### TODO LIST

@ -46,16 +46,17 @@ public class XxlJobExecutor {
// ---------------------- field ----------------------
private String adminAddresses;
private String accessToken;
private int timeout;
private Boolean enabled;
private String appname;
private String address;
private String ip;
private String adminAddresses; // admin address list, such as "http://address" or "http://address01,http://address02"
private String accessToken; // access token
private int timeout = 3; // timeout by second, default 3s
private boolean enabled = true; // executor enable, default true
private String appname; // executor appname
private String ip; // executor server-info
private int port;
private String logPath;
private int logRetentionDays;
private String address; // executor registry-address: default use address to registry , otherwise use ip:port if address is null
private String logPath = "/data/applogs/xxl-job/jobhandler"; // executor log-path
private int logRetentionDays = 30; // executor log-retention-days
private boolean glueEnabled = true; // executor glue (non-BEAN) task enable, default true
public void setAdminAddresses(String adminAddresses) {
this.adminAddresses = adminAddresses;
@ -66,27 +67,30 @@ public class XxlJobExecutor {
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public void setEnabled(Boolean enabled) {
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public void setAppname(String appname) {
this.appname = appname;
}
public void setAddress(String address) {
this.address = address;
}
public void setIp(String ip) {
this.ip = ip;
}
public void setPort(int port) {
this.port = port;
}
public void setAddress(String address) {
this.address = address;
}
public void setLogPath(String logPath) {
this.logPath = logPath;
}
public void setLogRetentionDays(int logRetentionDays) {
this.logRetentionDays = logRetentionDays;
}
public void setGlueEnabled(boolean glueEnabled) {
this.glueEnabled = glueEnabled;
}
public String getAccessToken() {
return accessToken;
@ -94,11 +98,14 @@ public class XxlJobExecutor {
public String getAppname() {
return appname;
}
public int getPort() {
return port;
}
public String getAddress() {
return address;
}
public int getPort() {
return port;
public boolean getGlueEnabled() {
return glueEnabled;
}
@ -120,15 +127,23 @@ public class XxlJobExecutor {
*/
public void start() throws Exception {
// bind instance
xxlJobExecutor = this;
// valid enabled
if (enabled!=null && !enabled) {
if (!enabled) {
logger.info(">>>>>>>>>>> xxl-job executor start fail, enabled:{}", enabled);
return;
}
// valid param
if (StringTool.isBlank(adminAddresses)) {
throw new RuntimeException("xxl-job executor adminAddresses empty.");
}
if (StringTool.isBlank(appname)) {
throw new RuntimeException("xxl-job executor appname empty.");
}
// bind instance
xxlJobExecutor = this;
// init logpath
XxlJobFileAppender.initLogPath(logPath);

@ -33,14 +33,20 @@ public class XxlJobFileAppender {
* ---/2017-12-25/821.log
*
*/
private static String logBasePath = "/data/applogs/xxl-job/jobhandler";
private static String glueSrcPath = new File(logBasePath, "gluesource").getPath();
private static String callbackLogPath = new File(logBasePath, "callbacklogs").getPath();
private static String logBasePath;
private static String glueSrcPath;
private static String callbackLogPath;
/**
* init log path
*/
public static void initLogPath(String logPath) throws IOException {
// init
if (StringTool.isNotBlank(logPath)) {
logBasePath = logPath.trim();
if (StringTool.isBlank(logPath)) {
throw new RuntimeException("xxl-job logPath cannot be empty");
}
logBasePath = logPath.trim();
// mk base dir
File logPathDir = new File(logBasePath);
FileTool.createDirectories(logPathDir);

@ -47,13 +47,23 @@ public class ExecutorBizImpl implements ExecutorBiz {
@Override
public Response<String> run(TriggerRequest triggerRequest) {
// load oldjobHandler + jobThread
// load job infojobHandler + jobThread + glueTypeEnum
JobThread jobThread = XxlJobExecutor.getInstance().loadJobThread(triggerRequest.getJobId());
IJobHandler jobHandler = jobThread!=null?jobThread.getHandler():null;
String removeOldReason = null;
// validjobHandler + jobThread
GlueTypeEnum glueTypeEnum = GlueTypeEnum.match(triggerRequest.getGlueType());
// valid glue (non-BEAN) enabled
if (glueTypeEnum != null && GlueTypeEnum.BEAN != glueTypeEnum) {
boolean glueEnabled = XxlJobExecutor.getInstance().getGlueEnabled();
if (!glueEnabled) {
logger.warn(">>>>>>>>>>> xxl-job executor not support current glue type[{}], please check executor configuration.", glueTypeEnum.getDesc());
return Response.of(XxlJobContext.HANDLE_CODE_FAIL, "fail, current glue type ["+ glueTypeEnum.getDesc() +"] not supported.");
}
}
// dispatch handler
if (GlueTypeEnum.BEAN == glueTypeEnum) {
// new jobhandler

@ -18,6 +18,8 @@ xxl.job.admin.timeout=3
### xxl-job executor enable, default true
xxl.job.executor.enabled=true
### xxl-job executor glue (non-BEAN) task enable, default true
xxl.job.executor.glueenabled=true
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample-ai
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null

@ -28,6 +28,9 @@ public class XxlJobConfig {
@Value("${xxl.job.executor.enabled}")
private Boolean enabled;
@Value("${xxl.job.executor.glueenabled:true}")
private Boolean glueEnabled;
@Value("${xxl.job.executor.appname}")
private String appname;
@ -59,12 +62,13 @@ public class XxlJobConfig {
xxlJobSpringExecutor.setTimeout(timeout);
xxlJobSpringExecutor.setEnabled(enabled);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
xxlJobSpringExecutor.setExcludedPackage(excludedPackage);
xxlJobSpringExecutor.setGlueEnabled(glueEnabled);
return xxlJobSpringExecutor;
}

@ -18,14 +18,16 @@ xxl.job.admin.timeout=3
xxl.job.executor.enabled=true
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
### xxl-job executor excluded package, will skip scan job. such as "org.package01" or "org.package01,org.package02"
xxl.job.executor.excludedpackage=
### xxl-job executor glue (non-BEAN) task enable, default true
xxl.job.executor.glueenabled=true
Loading…
Cancel
Save