java项目引入elastic job依赖须用elasticjob-lite-spring-boot-starter 3.1.0+(spring boot 2.7+),禁用xml配置,确保zookeeper连接正确、acl/chroot配置匹配,并满足@elasticjob类的扫描、构造、方法签名等条件。

Java 项目里怎么引入 Elastic Job 依赖
Elastic Job 不是 Spring Boot 官方 starter,直接加 spring-boot-starter-quartz 或乱配 quartz 依赖会跑不起来——它底层用的是 ZooKeeper 做分布式协调,不是纯内存调度。
必须按版本对齐选包:elasticjob-lite-spring-boot-starter(推荐)或 elasticjob-lite-core + 手动装配。Spring Boot 2.7+ 用 3.x 版本,3.0.0 起已弃用 elasticjob-lite-spring-namespace,XML 配置彻底失效。
- Spring Boot 2.7+ → 用
elasticjob-lite-spring-boot-starter3.1.0+ - 若用 ZooKeeper 3.8+,确认
curator-framework版本 ≥ 5.4.0,否则连接闪断 - 别混用
elasticjob-lite和elasticjob-cloud的 jar,类加载冲突报NoClassDefFoundError: org.apache.shardingsphere.elasticjob.lite.api.bootstrap.JobBootstrap
ZooKeeper 连接和作业注册失败的典型表现
启动后控制台没打印 JobRegistryCenter 初始化日志,或者抛 ConnectionLossException、KeeperErrorCode = NoNode,基本就是 ZooKeeper 没通或路径权限不对。
Elastic Job 启动时会往 ZooKeeper 写节点(默认在 /elasticjob 下),如果 ZooKeeper 开了 ACL 或 chroot,而配置里没带路径前缀,就会写不进、读不到、任务不触发。
立即学习“Java免费学习笔记(深入)”;
- 检查
elasticjob.zookeeper.server-lists是否含端口(如127.0.0.1:2181),不能只写 IP - 若 ZooKeeper 启用了 chroot(比如连的是
127.0.0.1:2181/elasticjob-test),必须在配置中显式带上:elasticjob.zookeeper.namespace=elasticjob-test - 本地调试建议关掉 ZooKeeper ACL,生产环境再开;ACL 规则没配全会导致
AuthFailedException
@ElasticJob 注解不生效的三个常见原因
加了 @ElasticJob、写了 jobHandler 类,但作业从不执行——大概率是 Spring 上下文没扫到、自动配置被跳过,或者方法签名不符合契约。
这个注解不是“加了就运行”,它依赖 ElasticJobAutoConfiguration 的条件装配,且要求被代理的类满足:有无参构造、非 final、方法是 public、参数只能是 ShardingContext。
- 确保主启动类所在包能扫描到作业类(或显式加
@ComponentScan) - 不要把作业类放在
test目录或@Profile("test")条件下,否则运行时不可见 - 方法签名必须是
public void execute(ShardingContext context),返回值不能是String或void以外类型,参数不能多也不能少
分片项分配不均或一直卡在 INIT 状态
多个实例启动后,有的节点永远分不到分片,或者所有节点都停在 INIT,说明分片协调没达成共识——通常是 ZooKeeper 会话超时或网络抖动导致 Leader 选举失败。
Elastic Job 依赖 ZooKeeper 的临时节点和 Watch 机制做分片重平衡,一旦会话中断,旧节点残留的临时节点没及时清除,新节点就无法接管分片。
- 调大
elasticjob.zookeeper.base-sleep-time-milliseconds(默认 1000)和max-retries(默认 3),避免瞬时抖动误判离线 - 检查各节点系统时间是否一致,误差 > 30s 会导致 ZooKeeper session 失效
- 上线前先用
zkCli.sh连上去手动删掉残留的/elasticjob/{jobName}/sharding节点,再重启
分片逻辑藏在 ZooKeeper 节点数据里,不看 ZK 就等于盲调;很多问题表面是代码没触发,实际是协调层已经卡死。别绕过 ZooKeeper 直接查日志。











