xxl-job整合nacos

举报
张尧 发表于 2022/12/06 15:08:29 2022/12/06
【摘要】 xxl-job是一款优秀的分布式定时任务框架,详情请看https://www.xuxueli.com/xxl-job/最近需要部署一套xxl-job,本来直接打成jar包部署就行了,但是这样的方式每次修改相关的配置(比如数据库),都比较麻烦,还需要重新打包或者修改命令行启动参数,所以就想借用nacos的配置中心功能来进行动态配置,这样比较简单.所以本文中主要使用了nacos的配置中心功能,注...

xxl-job是一款优秀的分布式定时任务框架,详情请看https://www.xuxueli.com/xxl-job/

最近需要部署一套xxl-job,本来直接打成jar包部署就行了,但是这样的方式每次修改相关的配置(比如数据库),都比较麻烦,还需要重新打包或者修改命令行启动参数,所以就想借用nacos的配置中心功能来进行动态配置,这样比较简单.

所以本文中主要使用了nacos的配置中心功能,注册中心虽然引入了,但是并没有使用太多,最多起到健康监控的功能,毕竟正常情况下没有其他的地方会调用xxl-job


1. nacos部署

https://github.com/alibaba/nacos/releases 下载对应系统的nacos包即可

以windows为例

解压后进入bin目录启动,启动命令为:

startup.cmd -m standalone

单机模式启动,启动成功后访问localhost:8848/nacos,默认用户名/密码: nacos/nacos

其他问题参见: https://nacos.io/zh-cn/docs/quick-start.html


2. xxl-job改造

拉取xxl-job源码

源码仓库地址

Release Download

https://github.com/xuxueli/xxl-job

Download

http://gitee.com/xuxueli0323/xxl-job

Download

我这里以xxl-job 2.3.1版本为基础进行改造,其他版本大同小异

2.1 引入nacos依赖

修改xxl-job-admin模块pom文件,增加如下依赖

<!-- nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
</dependency>

<!-- nacos-config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
</dependency>

<!-- spring-cloud-bootstrap -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>${spring-cloud-bootstrap.version}</version>
</dependency>

其中版本号如下:

<properties>
    <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
    <spring-cloud-bootstrap.version>3.0.1</spring-cloud-bootstrap.version>
</properties>

这里使用2021.0.1.0版本的spring-cloud-alibaba,是根据xxl-job-admin 2.3.1版本的spring-boot版本为2.6.7,根据spring官方的对应关系https://spring.io/projects/spring-cloud 使用此版本,如果与本文中版本不一致,请自行修改.

spring-cloud-starter-bootstrap 引入此依赖是因为spring-cloud 2020版本后默认情况下不会读取bootstrap属性,会导致nacos的配置无法被读取,有两种方法解决,引入此jar包是一种解决办法. 参考: https://www.yuque.com/docs/share/b79576cf-6f1b-4797-91b7-f70e0aa24bcb?# 《SpringCloud与SpringBoot配置文件问题》


2.2 修改配置文件

依赖引入后,需要进行xxl-job-admin模块配置文件的修改,主要增加nacos的配置

spring.application.name=xxl-job-admin
### nacos
# nacos地址
nacos.server-addr=127.0.0.1:8848
# 分组
nacos.group=DEFAULT_GROUP
# 命名空间
nacos.namespace=public
# 服务发现配置
spring.cloud.nacos.discovery.server-addr=${nacos.server-addr}
spring.cloud.nacos.discovery.group=${nacos.group}
spring.cloud.nacos.discovery.namespace=${nacos.namespace}
spring.cloud.nacos.discovery.enabled=true
# 配置中心配置
spring.cloud.nacos.config.server-addr=${nacos.server-addr}
spring.cloud.nacos.config.group=${nacos.group}
spring.cloud.nacos.config.namespace=${nacos.namespace}
spring.cloud.nacos.config.enabled=true
spring.cloud.nacos.config.file-extension=properties

如果是本地单机启动的nacos,可以简单配置下,如果是正式环境的配置,还需要增加group,namespace等配置,具体参考nacos官网


2.3 nacos增加配置

选择对应的ns后新增配置

data-id的默认规则为:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

由于没有设置spring.profiles.active,所以我们设置的data-id是 xxl-job-admin.properties


然后将application.properties中的配置信息都放到nacos

程序里只留下nacos的相关配置信息

2.4 测试

启动xxl-job-admin,发现无异常

修改nacos配置中心,端口号为8081,重启xxl-job-admin,发现端口号确实变成了8081,成功.


代码地址: https://github.com/zhangyao-zy/xxl-job/tree/feature/20220906/zhangyao/add_nacos

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。