当前位置: 代码网 > it编程>编程语言>Java > SpringBoot实现连接nacos并支持多环境部署

SpringBoot实现连接nacos并支持多环境部署

2024年06月10日 Java 我要评论
nacos安装官网有很详细的步骤,这里不再赘述:https://nacos.io/zh-cn/docs/quick-start.htmlnacos服务配置基本步骤下载jar包或同步代码后编译jar包生

nacos安装

官网有很详细的步骤,这里不再赘述:https://nacos.io/zh-cn/docs/quick-start.html

nacos服务配置基本步骤

  • 下载jar包或同步代码后编译jar包
  • 生成mysql数据库表 (mysql脚本在:config目录里的nacos-mysql.sql)
  • 重置nacos默认用户的密码,用下面方式取得密码的加密串,更新数据表里的密码
string password = new bcryptpasswordencoder().encode("你的密码");

springboot客户端读取nacos的配置

  • pom引用:
 <dependency>
	<groupid>com.alibaba.boot</groupid>
	<artifactid>nacos-config-spring-boot-starter</artifactid>
	<version>0.2.1</version>
</dependency>
  • 配置nacos服务地址

在配置文件中配置nacos服务的地址

nacos:
  config:
    server-addr: 10.10.1.111:8848
  • 获取public空间下的默认group的某个dataid的某个属性值

nacos默认创建了一个“public”的命名空间,创建的dataid在默认名为“default_group”的group下。

获取默认环境下的新建的例如叫"myfirstconfig"这个dataid的配置的方法如下:

@nacospropertysource(dataid = "myfirstconfig", autorefreshed = true)
public class nacosmyfirstconfig {
    @nacosvalue(value = "${expireseconds:30}", autorefreshed = true)
    private int expireseconds;

假设"myfirstconfig"这个dataid中有个属性名为expireseconds,获取这个属性名的值的方法如上,expireseconds冒号后面的值为默认值,当获取不到nacos对应的属性名时使用的默认值。

autorefreshed = true则表示nacos server上这个属性值一旦变化,客户端就能获取到新的变化后的值。

  • 你可以新建新的namespace命名空间和新的group名,接下来多环境的部署就要用到不同的namespace

springboot客户端多环境使用nacos

我们的程序一般会有开发环境、测试环境、生产环境,或者测试和生成之间有堡垒环境,一套java代码是通过指定 spring.profiles.active以及对应的application-xxx.yml来控制不同环境及其配置的。

那么怎么让不同的环境,读取到不同的nacos配置值呢?

在nacos上创建不同的namespace

  • nacos上可以创建多个namespace,除了默认的public的namespace,你可以创建dev、test等namespace。新建的namespace会在名称旁边出现一串字符,如6e9c8f46-3e40-41f2-9bf3-50f78c860971,这就是
  • 这个namespac的唯一id,记下这些唯一id,接下来有用。

在每个namespace中创建相同名称的一套dataid,里面的属性名也相同,只有属性值不同,都放在默认的“default_group”的group下

  • 比如刚才的myfirstconfig这个dataid,在dev和test的namespace下都创建出来,并且里面也都有expireseconds这个属性名,属性值可以不同。

客户端指定不同的namespace

  • 在不同的application-xxx.yml文件中指定不同的namespace
nacos:
  config:
    server-addr: 10.10.1.111:8848
    namespace: 6e9c8f46-3e40-41f2-9bf3-50f78c860971

注意namespace不是填写dev、test这些名称,而是要填写唯一id串,每个新建的namespace都有一个唯一id,如上所示。

如果是调用默认的publicnamespace,则不需要指定namespace

这样,你可以发现,不同的环境启动的程序,获取到的是不同的namespace下的属性值,其余地方的代码不需要做任何修改。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com