ElasticJob 3.0.4 配置参数详解
完整梳理 Apache ShardingSphere ElasticJob 3.0.4 的三层配置体系(Java API `JobConfiguration`、Spring Boot Starter yaml、ZooKeeper 存储层 config 节点),给出全部参数的实测默认值与生效行为,并用真实命令验证 overwrite 语义、props 传参与 yaml 配置链路。
ElasticJob 3.0.4 配置参数详解
目标:完整梳理 Apache ShardingSphere ElasticJob 3.0.4 的三层配置体系(Java API
JobConfiguration、Spring Boot Starter yaml、ZooKeeper 存储层 config 节点),给出全部参数的实测默认值与生效行为,并用真实命令验证 overwrite 语义、props 传参与 yaml 配置链路。所有回显均为 Ubuntu 22.04 + ZooKeeper 3.8.4 + OpenJDK 17 环境实测原文。
一、环境信息
| 项 | 取值 |
|---|---|
| ElasticJob 版本 | 3.0.4(Maven Central 最新发布版) |
| ZooKeeper | 3.8.4 standalone,节点 zk1(10.89.64.10:2181) |
| 应用节点 | app1(10.89.64.11),OpenJDK 17.0.20.1,JVM -Xms256m -Xmx512m |
| 实测工具 | javap(反编译核对 API)、jshell(打印默认值)、zkCli.sh(核对存储层)、mvn + java(运行验证) |
| 实测工程 | elasticjob-demo / elasticjob-sbdemo(复用《ElasticJob 3.0.4 安装指南》的工程骨架) |
💡 阅读前提:ElasticJob 的「配置」不是单个配置文件,而是一条 Java API → ZooKeeper 存储 → 运行期读取 的链路。Spring Boot Starter yaml 只是 Java API 的声明式外壳,最终都以 JSON/YAML 形态持久化在 ZooKeeper 的
/<namespace>/<jobName>/config节点里。因此本文以「ZooKeeper config 节点内容」作为配置生效的最终判据。
二、配置体系总览
┌────────────────────────────────────────────────────────────┐
│ 第 1 层:声明式/编程式入口 │
│ A. Java API:JobConfiguration.newBuilder(...) 链式构建 │
│ B. Spring Boot Starter:application.yml → 自动装配映射 │
├────────────────────────────────────────────────────────────┤
│ 第 2 层:overwrite 决定取舍 │
│ overwrite=true → 本地配置写回 ZK(以本地为准) │
│ overwrite=false → 本地配置被忽略(以 ZK 存储为准) │
├────────────────────────────────────────────────────────────┤
│ 第 3 层:ZooKeeper 存储层(运行期唯一事实源) │
│ /<namespace>/<jobName>/config 节点(YAML 文本) │
└────────────────────────────────────────────────────────────┘
运行期任何一次触发都从第 3 层读配置——这意味着:改本地代码/yaml 而不改 overwrite,对已存在的作业不生效(第五章有铁证实测)。
三、注册中心参数详解(ZookeeperConfiguration)
注册中心参数通过 new ZookeeperConfiguration(serverLists, namespace) 传入,共 8 个(javap 实测类签名):
public final class org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperConfiguration {
public java.lang.String getServerLists();
public java.lang.String getNamespace();
public int getBaseSleepTimeMilliseconds();
public int getMaxSleepTimeMilliseconds();
public int getMaxRetries();
public int getSessionTimeoutMilliseconds();
public int getConnectionTimeoutMilliseconds();
public java.lang.String getDigest();
}
构造后各参数默认值(jshell 实测回显):
serverLists=10.89.64.10:2181
namespace=default-demo
baseSleepTimeMilliseconds=1000
maxSleepTimeMilliseconds=3000
maxRetries=3
sessionTimeoutMilliseconds=0
connectionTimeoutMilliseconds=0
digest=null
逐参数说明:
| 参数 | 默认值(实测) | 说明与调优建议 |
|---|---|---|
| serverLists | (构造必填) | ZK 地址列表,集群逗号分隔:zk1:2181,zk2:2181,zk3:2181 |
| namespace | (构造必填) | 命名空间,即 ZK 根节点名;多套环境/多应用共用 ZK 时用它隔离 |
| baseSleepTimeMilliseconds | 1000 | Curator 重试初始间隔(ms) |
| maxSleepTimeMilliseconds | 3000 | Curator 重试最大间隔(ms) |
| maxRetries | 3 | Curator 最大重试次数;ZK 抖动时超过次数即任务协调失败,弱网环境适当调大 |
| sessionTimeoutMilliseconds | 0(未显式设置) | 会话超时;0 表示走连接期协商,本实测握手日志显示 negotiated timeout = 40000(ms) |
| connectionTimeoutMilliseconds | 0(未显式设置) | 连接超时,0 同上走默认 |
| digest | null | ZK digest 认证的 user:password;ZK 开启 ACL 时必填,生产建议开启 |
Spring Boot Starter 中这 8 个参数一一对应 yaml 键(第四章 6.2 节有元数据实测):elasticjob.reg-center.server-lists、namespace、base-sleep-time-milliseconds、max-sleep-time-milliseconds、max-retries、session-timeout-milliseconds、connection-timeout-milliseconds、digest。
⚠️ 实测提示:
sessionTimeoutMilliseconds/connectionTimeoutMilliseconds的对象默认值是 0 而不是文档常说的 60000/15000——0 在连接时由底层兜底(实测协商为 40000ms)。若在弱网/跨机房场景要精确控制,必须显式设值。
四、作业配置参数详解(JobConfiguration)
作业参数通过 JobConfiguration.newBuilder(jobName, shardingTotalCount) 的 Builder 链式设置。3.0.4 Builder 全部方法(javap 实测):
public class org.apache.shardingsphere.elasticjob.api.JobConfiguration$Builder {
public Builder cron(java.lang.String);
public Builder timeZone(java.lang.String);
public Builder shardingItemParameters(java.lang.String);
public Builder jobParameter(java.lang.String);
public Builder monitorExecution(boolean);
public Builder failover(boolean);
public Builder misfire(boolean);
public Builder maxTimeDiffSeconds(int);
public Builder reconcileIntervalMinutes(int);
public Builder jobShardingStrategyType(java.lang.String);
public Builder jobExecutorServiceHandlerType(java.lang.String);
public Builder jobErrorHandlerType(java.lang.String);
public Builder jobListenerTypes(java.lang.String...);
public Builder addExtraConfigurations(org.apache.shardingsphere.elasticjob.api.JobExtraConfiguration);
public Builder description(java.lang.String);
public Builder setProperty(java.lang.String, java.lang.String);
public Builder disabled(boolean);
public Builder overwrite(boolean);
public Builder label(java.lang.String);
public Builder staticSharding(boolean);
public final JobConfiguration build();
}
按功能分组的逐参数详解(默认值以第五章 ZK config 节点实测 dump 为准):
4.1 调度与分片(必填项集中地)
| 参数 | 默认值 | 说明 |
|---|---|---|
| jobName(构造参数) | (必填) | 作业名,即 ZK 节点名;同一 namespace 内唯一 |
| shardingTotalCount(构造参数) | (必填) | 分片总数;决定并行度与节点树 sharding/0..N-1 数量 |
| cron | null(必设) | cron 表达式,沿用 Quartz 语法(秒 分 时 日 月 周 [年]),内置引擎即 Quartz 2.3.2 |
| timeZone | null | 触发时区;null 用 JVM 默认,跨时区部署建议显式(如 Asia/Shanghai) |
| shardingItemParameters | ''(空串) | 分片项参数映射,格式 0=A,1=B,2=C;execute 时经 ShardingContext.getShardingParameter() 传入 |
| jobParameter | ''(空串) | 作业级参数(与分片无关),经 ShardingContext.getJobParameter() 传入 |
4.2 治理行为开关
| 参数 | 默认值 | 说明 |
|---|---|---|
| failover | false | 失效转移:实例宕机后未完成分片由存活实例接管;开启会增加 ZK 写入与协调开销 |
| misfire | true | 错过补偿:实例因停机/繁忙错过的触发,恢复后自动补执行一次 |
| monitorExecution | true | 执行状态监控:每次执行写 ZK(sharding 项 running 状态),是 failover 生效的前提;超大吞吐量作业可关以减 ZK 压力(关后 failover/misfire 失效) |
| maxTimeDiffSeconds | -1 | 最大允许的本机与注册中心时间误差(秒);-1 不校验。开启后误差超限的实例拒绝执行,防止时钟漂移重复触发 |
| reconcileIntervalMinutes | 10 | 分片对账周期(分钟):定期比对实际分片与预期,自动修复不一致 |
| staticSharding | false | 静态分片:true 时实例扩缩容不触发重分片(作业分片固定绑定) |
| disabled | false | 禁用作业:true 时作业仅注册不执行(可通过运维 API 恢复) |
| overwrite | false | 配置覆盖开关,语义见第二章/第五章(本篇最关键的参数) |
4.3 扩展点(SPI)
| 参数 | 默认值 | 说明 |
|---|---|---|
| jobShardingStrategyType | null | 分片策略 SPI 名;null 用默认「按实例 IP 平均分配」 |
| jobExecutorServiceHandlerType | null | 执行线程池 SPI 名(如 CPU、SINGLE_THREAD);null 用默认池 |
| jobErrorHandlerType | null | 错误处理器 SPI 名:LOG(默认)/THROW/IGNORE/EMAIL/WECHAT/DINGTALK |
| jobListenerTypes | 空 | 作业监听器 SPI 名列表,可传多个 |
| description | '' | 作业描述,仅存储与展示 |
| label | null | 3.0.4 新增标签字段,配合运维筛选 |
| setProperty / props | 空 Properties | 作业类型专属键值对(如 script/http 作业的参数,见 4.4) |
| addExtraConfigurations | 空 | 追加扩展配置对象(如 tracing RDB 的 JobExtraConfiguration) |
4.4 props 实测:SCRIPT 作业的正确键名(排障实录)
script 作业的命令行通过 props 传入。社区教程常见的下划线键名在 3.0.4 会失败,实测对照:
错误写法(script.command_line),作业每次触发都报错(实测日志):
14:26:28.053 [propsScriptJob_Worker-1] ERROR o.a.s.e.e.h.g.LogJobErrorHandler - Job 'propsScriptJob' exception occur in job processing
org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException: Cannot find script command line, job is not executed.
at org.apache.shardingsphere.elasticjob.script.executor.ScriptJobExecutor.getScriptCommandLine(ScriptJobExecutor.java:55)
...
此时配置已入库(ZK config 节点可见 props: script.command_line: ...),但执行器读不到——用 javap -constants 反编译核对真实键名:
javap -constants -cp elasticjob-script-executor-3.0.4.jar \
org.apache.shardingsphere.elasticjob.script.props.ScriptJobProperties
public static final java.lang.String SCRIPT_KEY = "script.command.line";
结论:3.0.4 的键名是全点号的 script.command.line(下划线是旧版写法)。改对后实测触发正常(连续两轮触发输出):
===OUTFILE===
script-ok
script-ok
⚠️ 另两个 script 作业实测坑:
script.command.line里写>>/>重定向无效:执行器走 Apache commons-exec(classpath 实测 commons-exec-1.3.jar),不经过 shell 解释。需要重定向/管道时用/bin/sh /path/runscript.sh包装脚本。实测直接写/bin/echo xxx >> /root/scriptjob.out时,>>与路径被当作 echo 的普通参数打印(script-job-props-works >> /root/scriptjob.out {...})。- ShardingContext 会作为附加参数追加到命令行:实测输出末尾带
{"jobName":"propsScriptJob","taskId":"...","shardingTotalCount":1,"jobParameter":"","shardingItem":0},脚本要按参数个数做好容错。
五、配置生效实测(ZooKeeper 存储层)
本节用真实命令走完「写入 → 改写 → 保持」闭环,作业均为 elasticjob-demo 命名空间下的最小配置实例(启动方式见《ElasticJob 3.0.4 安装指南》4.5)。
5.1 首次写入:默认值 dump
以仅设 cron 与分片数的配置启动(overwrite=true),用 zkCli 读取配置节点:
echo -e "get /elasticjob-demo/cfgMinimalJob/config" | \
zkCli.sh -server 127.0.0.1:2181
实测回显(完整 config 节点内容):
cron: 0/8 * * * * ?
description: ''
disabled: false
failover: false
jobName: cfgMinimalJob
jobParameter: ''
maxTimeDiffSeconds: -1
misfire: true
monitorExecution: true
overwrite: true
reconcileIntervalMinutes: 10
shardingItemParameters: 0=A,1=B,2=C
shardingTotalCount: 2
staticSharding: false
这张 dump 就是第四章默认值表的实测依据:monitorExecution=true、misfire=true、maxTimeDiffSeconds=-1、reconcileIntervalMinutes=10、failover=false、overwrite=false、disabled=false、staticSharding=false、description=''。
5.2 overwrite=true:本地配置写回 ZK
同一作业名以不同参数重启(cron 0/10、分片 3、分片参数 alpha/beta/gamma、failover=true):
cron: 0/10 * * * * ?
failover: true
overwrite: true
shardingItemParameters: 0=alpha,1=beta,2=gamma
shardingTotalCount: 3
配置节点被整体改写,overwrite=true 的「以本地为准」语义实测成立。
5.3 overwrite=false:本地配置被忽略(运行期以 ZK 为准的铁证)
再以 overwrite=false 启动同一作业,本地故意传离谱参数(cron 0/99、分片 9、分片参数 0=zzz):
[cfg-exp3] registry center init ok, zk=10.89.64.10:2181 ns=elasticjob-demo
[cfg-exp3] job cfgMinimalJob scheduled, cron=0/99 * * * * ? shards=9
进程日志看似「按 0/99、9 分片」调度了,但实际触发回显是 3 个分片、alpha/beta/gamma 参数(即 5.2 写入的 ZK 存储配置):
2026-10-23T14:25:20.050048239 [elasticjob-cfgMinimalJob-1] trigger | shardingItem=0 shardingTotalCount=3 shardingParameter=alpha jobParameter=
2026-10-23T14:25:20.050055410 [elasticjob-cfgMinimalJob-2] trigger | shardingItem=1 shardingTotalCount=3 shardingParameter=beta jobParameter=
2026-10-23T14:25:20.050091591 [elasticjob-cfgMinimalJob-3] trigger | shardingItem=2 shardingTotalCount=3 shardingParameter=gamma jobParameter=
复测 ZK 节点未被改动(仍是 cron: 0/10、shardingTotalCount: 3)。
⚠️ 实践结论(多处踩坑来源):
overwrite=false时本地JobConfiguration对象只用于「首次创建」,运行期真正生效的是 ZK 存储值。想改线上作业配置,要么把 overwrite 打开滚动重启,要么直接改 ZK 节点(重启实例后生效)。
5.4 作业治理节点树
作业注册后 ZK 上的完整节点结构(zkCli 实测):
[zk] ls /elasticjob-demo
[cfgMinimalJob, javaSimpleJob, offlineSmokeJob, propsScriptJob]
[zk] ls /elasticjob-demo/javaSimpleJob
[config, instances, leader, servers, sharding]
[zk] ls /elasticjob-demo/javaSimpleJob/sharding
[0, 1, 2]
[zk] get /elasticjob-demo/javaSimpleJob/sharding/1/instance
10.89.64.11@-@5029
[zk] get /elasticjob-demo/javaSimpleJob/leader/election/instance
10.89.64.11@-@5029
[zk] ls /elasticjob-demo/javaSimpleJob/instances
[10.89.64.11@-@5029]
节点语义速查:
| 节点 | 语义 |
|---|---|
| config | 作业配置(YAML 文本,即 5.1 dump) |
| instances | 存活的作业实例(临时节点),值格式 IP@-@PID |
| leader/election | 主节点选举(instance 记录当选者,latch 为 Curator 分布式锁) |
| servers | 服务器维度的注册与状态 |
| sharding/N | 分片项 N 的运行态(instance 子节点记录当前承担实例) |
💡 排障入口:作业「不跑」时按此树排查——
instances为空说明进程没注册上(连不上 ZK/namespace 错);sharding/N/instance缺失说明未完成分片分配;config与预期不符多半是 overwrite 语义没吃透。
六、Spring Boot Starter yaml 配置
6.1 构件名辨析(先排一个常见错)
3.x 的 starter 构件是 elasticjob-lite-spring-boot-starter;Maven Central 上的 elasticjob-spring-boot-starter 是 2.x 遗留线、没有 3.0.4 版本。写错构件名 Maven 报(实测):
[ERROR] dependency: org.apache.shardingsphere.elasticjob:elasticjob-spring-boot-starter:jar:3.0.4 (compile)
[ERROR] elasticjob-spring-boot-starter:jar:3.0.4 was not found in https://maven.aliyun.com/repository/public ...
正确依赖:
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
6.2 yaml 键全集(starter 元数据实测提取)
从 elasticjob-lite-spring-boot-starter-3.0.4.jar 内的 META-INF/spring-configuration-metadata.json 实测提取的键:
| yaml 键 | 说明 |
|---|---|
| elasticjob.reg-center.server-lists / namespace | 注册中心地址与命名空间(必填) |
| elasticjob.reg-center.base-sleep-time-milliseconds / max-sleep-time-milliseconds / max-retries | Curator 重试参数(同第三章) |
| elasticjob.reg-center.session-timeout-milliseconds / connection-timeout-milliseconds / digest | 会话/连接超时与认证(同第三章) |
| elasticjob.jobs.<jobName>.* | 作业配置 Map,键名见下表 |
| elasticjob.dump.enabled / dump.port | SnapshotService 诊断端口开关 |
| elasticjob.tracing.type / data-source / include-job-names / exclude-job-names | 事件追踪配置 |
作业级键(javap 反编译 ElasticJobConfigurationProperties 实测全集,yaml 中用短横线命名):
elastic-job-class elastic-job-type job-bootstrap-bean-name
cron time-zone sharding-total-count
sharding-item-parameters job-parameter monitor-execution
failover misfire max-time-diff-seconds
reconcile-interval-minutes job-sharding-strategy-type
job-executor-service-handler-type job-error-handler-type
job-listener-types description props
disabled overwrite
与 Java API 一一对应;elastic-job-class(普通类作业)与 elastic-job-type(SPI 类型作业如 SCRIPT/HTTP)二选一。
6.3 完整可运行示例
工程结构(Maven 编译实测 BUILD SUCCESS):
elasticjob-sbdemo/
├── pom.xml # spring-boot-starter-parent 2.7.18 + elasticjob-lite-spring-boot-starter 3.0.4
└── src/main/
├── java/com/example/
│ ├── SbDemoApplication.java # @SpringBootApplication 启动类
│ └── YamlSimpleJob.java # SimpleJob 实现,@Component 注册为 Bean
└── resources/application.yml
application.yml(实测全链路生效的配置):
spring:
application:
name: elasticjob-sbdemo
elasticjob:
reg-center:
server-lists: 10.89.64.10:2181
namespace: elasticjob-sbdemo
max-retries: 3
jobs:
yamlSimpleJob:
elastic-job-class: com.example.YamlSimpleJob
cron: 0/6 * * * * ?
sharding-total-count: 2
sharding-item-parameters: 0=alpha,1=beta
description: yaml-driven demo job
failover: true
misfire: true
overwrite: true
job-parameter: from-yaml
⚠️ 排障实录(三个必踩坑,均为实测报错):
作业类必须是 Spring Bean:
YamlSimpleJob不加@Component时启动失败——Action: Consider defining a bean of type 'com.example.YamlSimpleJob' in your configuration.@SpringBootApplication 启动类不能是 final:
public final class SbDemoApplication触发 CGLIB 代理校验失败——org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: @Configuration class 'SbDemoApplication' may not be final. Remove the final modifier to continue.Spring Boot 2.7 + ElasticJob 3.0.4 的 snakeyaml 版本冲突:Boot 2.7.18 把 snakeyaml 管理为 1.30,而 ElasticJob 3.0.4 需要snakeyaml 2.x,启动即崩——
java.lang.NoClassDefFoundError: org/yaml/snakeyaml/inspector/TagInspector Caused by: java.lang.ClassNotFoundException: org.yaml.snakeyaml.inspector.TagInspector解决:pom 中覆盖属性
<snakeyaml.version>2.2</snakeyaml.version>(Spring Boot parent 按属性名管理版本)。
6.4 运行实测:yaml → 触发 → ZK
mvn spring-boot:run 启动(实测启动日志):
2026-10-23 14:37:57.188 INFO 6037 --- [ main] l.s.b.j.ElasticJobBootstrapConfiguration : creating Job Bootstrap Beans
2026-10-23 14:37:57.188 INFO 6037 --- [ main] com.example.SbDemoApplication : Started SbDemoApplication in 0.542 seconds (JVM running for 0.676)
[yaml-job] 2026-10-23T14:38:00.038039473 trigger | item=0/2 param=alpha desc=from-yaml
[yaml-job] 2026-10-23T14:38:00.038039100 trigger | item=1/2 param=beta desc=from-yaml
[yaml-job] 2026-10-23T14:38:06.009628017 trigger | item=0/2 param=alpha desc=from-yaml
[yaml-job] 2026-10-23T14:38:06.009746684 trigger | item=1/2 param=beta desc=from-yaml
每 6 秒触发、2 个分片(alpha/beta)、job-parameter=from-yaml 贯通到 ShardingContext——yaml 配置全链路生效。
持久化核验:elasticjob-sbdemo 命名空间下的 config 节点(zkCli 实测):
cron: 0/6 * * * * ?
description: yaml-driven demo job
disabled: false
failover: true
jobName: yamlSimpleJob
jobParameter: from-yaml
maxTimeDiffSeconds: -1
misfire: true
monitorExecution: false
overwrite: true
reconcileIntervalMinutes: 0
shardingItemParameters: 0=alpha,1=beta
shardingTotalCount: 2
staticSharding: false
⚠️ 值得注意的实测差异:同一份作业语义,Starter 持久化的默认值与 Java API 不同——
monitorExecution: false、reconcileIntervalMinutes: 0(Java API 默认true/10,见 5.1 dump)。即 starter 场景默认关闭执行监控、关闭分片对账。若依赖 failover/misfire 与自愈对账,建议在 yaml 显式补monitor-execution: true与reconcile-interval-minutes: 10。
七、生产配置模板与建议
7.1 Java API 模板(含注释)
JobConfiguration.newBuilder("orderSyncJob", 3) // 作业名 + 分片总数
.cron("0 0/10 * * * ?") // 每 10 分钟
.timeZone("Asia/Shanghai") // 显式时区
.shardingItemParameters("0=bj,1=sh,2=gz") // 分片参数
.failover(true) // 需要高可用就开
.misfire(true) // 默认已开
.monitorExecution(true) // failover 前提
.maxTimeDiffSeconds(60) // 时钟漂移保护
.reconcileIntervalMinutes(10) // 分片对账
.jobErrorHandlerType("LOG") // 错误处理器
.description("订单同步") // 可读性
.overwrite(true) // 首次上线 true,稳定后建议改 false 防误改
.build();
7.2 关键取值建议
| 参数 | 建议 | 理由 |
|---|---|---|
| overwrite | 首次发布 true;稳定运行期 false | 防止回滚/误发布覆盖线上已调整的配置(第五章实测语义) |
| failover + monitorExecution | 需要高可用成对开启 | monitorExecution=false 时 failover 无效 |
| maxTimeDiffSeconds | 集群各机时钟不可靠时设 60 左右 | 防时钟漂移导致同分片重复触发 |
| reconcileIntervalMinutes | 默认 10 可接受 | 对账是分片自愈的兜底 |
| namespace | 按环境隔离(如 elasticjob-prod / elasticjob-staging) | 一套 ZK 多环境共存的隔离边界 |
| digest | 生产 ZK 建议开启 ACL + digest | 注册中心节点可写即作业可被任意篡改 |
| jobErrorHandlerType | 告警需求强用 EMAIL/WECHAT/DINGTALK(需引对应模块) | 默认 LOG 只进应用日志,容易被刷屏淹没 |
八、常见问题(FAQ)
Q1:作业改了代码/配置但「没生效」?
九成是 overwrite=false:运行期以 ZK config 节点为准(5.3 铁证)。核对 zkCli get /<ns>/<job>/config 与预期,或临时 overwrite=true 滚动重启。
Q2:script 作业报 Cannot find script command line, job is not executed.?
props 键名写成了 script.command_line(下划线)。3.0.4 真实键名是 script.command.line(javap -constants 实测,见 4.4)。
Q3:script 作业执行了但重定向/管道不生效?
执行器走 commons-exec 不经 shell,>/>>/| 是普通字符。用 /bin/sh /path/script.sh 包装。
Q4:Starter 启动报 Consider defining a bean of type 'xxx'?
elastic-job-class 指向的类必须同时是 Spring Bean(加 @Component),见 6.3 排障实录 1。
Q5:Starter 启动报 @Configuration class 'X' may not be final?
启动类去掉 final 修饰符。
Q6:Boot 2.7 集成报 NoClassDefFoundError: org/yaml/snakeyaml/inspector/TagInspector?
snakeyaml 1.30(Boot 2.7 管理版本)与 ElasticJob 3.0.4(需 2.x)冲突,pom 覆盖 <snakeyaml.version>2.2</snakeyaml.version>。
Q7:Starter 依赖拉不下来 elasticjob-spring-boot-starter:3.0.4 was not found?
构件名写错,3.x 是 elasticjob-lite-spring-boot-starter(6.1)。
Q8:ScheduleJobBootstrap 编译不过 cannot find symbol?
包名差一层 .impl:org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap(3.0.4 真实路径)。
Q9:如何直接看线上作业的完整配置?
echo -e "get /<namespace>/<jobName>/config" | zkCli.sh -server <zk>:2181(回显模板见 5.1)。ZK 开了 ACL 时带 digest 认证登录。
九、参考链接
- 官方文档(Lite 手册):https://shardingsphere.apache.org/elasticjob/current/
- GitHub 仓库:https://github.com/apache/shardingsphere-elasticjob
- Maven Central 构件目录:https://repo1.maven.org/maven2/org/apache/shardingsphere/elasticjob/
- 本站认知篇:《ElasticJob 3.0.4 介绍与选型指南》
- 本站安装篇(本文实测工程骨架来源):《ElasticJob 3.0.4 安装指南》
- 本站同类消息中间件配置参考:《BlazingMQ 0.95.20 配置参数详解》