博主在上一篇博客中介绍了ElasticJob
的事件追踪:
- ElasticJob‐Lite:事件追踪
今天本来想介绍ElasticJob
的作业监听器,在上面这篇博客的代码基础上,移除了事件追踪相关配置,然后启动应用,应用报错如下图所示:
分析
报错的原因很显然是找不到com.mysql.cj.jdbc.MysqlDataSource
类,但是博主已经将事件追踪相关配置(数据库配置、事件追踪类型以及数据库依赖)都移除了,应用是怎么知道使用Mysql
数据库作为事件追踪数据源?以及如何确定数据源的类名(Mysql
版本不同,数据源类名存在差异)?所以,应用肯定是拉取了ZooKeeper
中关于作业的配置信息。
查看my-job
命名空间下MySimpleJob
作业的配置信息:
get /my-job/MySimpleJob/config
可以发现以下关于事件追踪配置的信息:
# 数据源类名
dataSourceClassName: com.mysql.cj.jdbc.MysqlDataSource
# 数据库配置
user: root
password: ITkaven@666.com
url: jdbc:mysql://localhost:3306/trace?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
# 事件追踪类型
type: RDB
解决
因此,解决这个问题有三种方法(博主能想到的):
- 换成原来的事件追踪配置,很显然应用是根据
ZooKeeper
中的作业配置信息来配置作业执行的各种环境,只要当前的作业配置信息和ZooKeeper
中的作业配置信息一致即可。 - 将本地作业配置信息覆盖注册中心的作业配置信息,需要设置
overwrite
参数为true
(默认为false
),每次启动时都将使用本地的作业配置(即以本地的作业配置为主,不然本地修改作业配置不会起作用)。 - 或者:
- 给作业一个新的作业名称,这样就会创建一个新的作业。
这个问题还是比较容易解决的,了解ElasticJob
中作业的执行原理对于解决这个问题是很有帮助的。