使用的elasticjob是当前最新版3.0.1.
<dependency>
<groupId>org.apache.shardingsphere.elasticjob</groupId>
<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
重启的时候遇到zookeeper注册冲突,网上查找解决方案,找到如下:
我们项目中的定时任务使用了代理,导致项目重启的时候
会报任务名冲突,提示任务已经在注册中心存在。于是,
我们加了以下的spring spi配置,让定时任务类在项目
启动的时候读取到原本的class类名,就不会提示冲突了。
https://blog.csdn.net/YANGYYID/article/details/116494593
按照这个方法修改后还是不行,回退版本也不行;后来参考这个方法,修改SpringProxyJobClassNameProvider,自定义的CustomJobClassNameProvider代码如下:
public class CustomJobClassNameProvider implements JobClassNameProvider{
/* (non-Javadoc)
* @see org.apache.shardingsphere.elasticjob.lite.internal.setup.JobClassNameProvider#getJobClassName(org.apache.shardingsphere.elasticjob.api.ElasticJob)
*/
@Override
public String getJobClassName(ElasticJob elasticJob) {
//System.out.println("use SpringProxyJobClassNameProvider");
String elasticJobClassName = ClassUtils.getUserClass(elasticJob).getName();
String jobClassName = AopUtils.isAopProxy(elasticJob) ? elasticJobClassName : elasticJob.getClass().getName();
//System.out.println(jobClassName);
return jobClassName;
}
}
使用ClassUtils.getUserClass(elasticJob).getName()这种方式来获取类名,接下来不管怎么重启都没有问题了。
记得在src/main/resources目录下新建META-INF目录,在META-INF目录下创建services目录,创建一个名为org.apache.shardingsphere.elasticjob.lite.internal.setup.JobClassNameProvider的文件,里面只有一行代码,就是CustomJobClassNameProvider的全路径(你类在什么包,则类名前面就是你的报名):
xxx.xxx.xxx.xxx.CustomJobClassNameProvider
zkCli 操作
我的zk安装目录是/var/www/data/zookeeper/zookeeper-3.8.0,进入/var/www/data/zookeeper/zookeeper-3.8.0/bin,运行zkCli.sh
:/var/www/data/zookeeper/zookeeper-3.8.0/bin$ ./zkCli.sh
查看节点目录
[zk: localhost:2181(CONNECTED) 21] ls /
删除节点:
[zk: localhost:2181(CONNECTED) 22] deleteall /elasticjob-admin-api-v0.7