nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案。它提供了动态服务发现、配置管理和 服务管理平台。nacos的核心功能包括服务发现、配置管理和动态服务管理,使得微服务架构下的服务治理 变得简单高效。
nacos的设计基于服务注册与发现、配置管理、动态服务管理等核心功能,通过简单的api和配置,实现了服 务的注册与发现、配置的集中管理和动态更新。nacos使用raft协议保证配置的一致性,同时支持多种配置 格式,如properties、yaml等。
一、准备
首先需要在本地电脑上进行nacos服务部署,默认端口是8848,部署成功之后,就可以去浏览器输入localhost:8848进入nacos管理平台。
二、nacos管理application.yml配置
1.nacos上新建命令空间和新建配置
首先,新建命名空间(如已存在则忽略),注意:命名空间id可不填,不填则自动生成:
然后,进到nacos的管理页面,在nacos控制台的左侧导航栏进入配置列表,转到“配置管理”页面,点击“+”来添加一个新的配置。
- data id:统一按照这个格式来: 服务名 - 环境 . 后缀名。主要是因为后面要导入的bootstrap.yaml spring默认的读取格式就是这样的。
- group:分组可以自定义,没有需求可以选择默认分组default_group。
- 命名空间:设置的命名空间id。
- 配置格式:yaml。
在配置内容区域,输入你想要暴露给spring boot应用的配置信息。可以从springboot获取yml配置信息,将需要配置到config的信息复制配置到配置内容中。
至此,nacos侧配置项已完成,接下来进行springboot项目配置改造。
2.springboot项目配置改造
pom文件引入依赖
首先修改spring boot项目的pom.xml文件,在pom.xml文件中添加nacos config和nacos discovery的依赖。
<!--nacos配置管理依赖--> <dependencies> <!-- nacos config --> <dependency> <groupid>com.alibaba.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-config</artifactid> <version>2021.1</version> </dependency> <!-- nacos discovery --> <dependency> <groupid>com.alibaba.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid> <version>2021.1</version> </dependency> </dependencies> <!--spring cloud从2021.0.5版本起,spring cloud将不再默认启用bootstrap,需要手动添加依赖。不引入bootstrap.properties/yml不生效--> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-bootstrap</artifactid> </dependency>
新建bootstrap.yml文件
spring引入了一种新的配置文件:bootstrap.yaml。它的读取流程如下:启动项目 --> 读取bootstrap.yaml文件 --> 找到nacos中,对应的配置文件 --> 读取本地
application.yaml文件 —> 创建容器 加载bean …
因此,我们需要在bootstrap.yml文件中配置nacos服务器地址和命名空间等信息,在spring中nacos配置中心的配置前缀是spring.cloud.nacos.config。
spring: application: name: demo-app cloud: nacos: discovery: server-addr: localhost:8848 # nacos服务地址 namespace: your-namespace-id # nacos命名空间id config: server-addr: localhost:8848 # nacos作为配置中心地址 namespace: your-namespace-id # nacos命名空间id group: your-group # 配置分组名称 data-id: your-data-id # 配置id,通常与spring.application.name相同 extension-configs: - data-id: another-data-id # 另一个配置id group: another_group # 另一个配置分组名称 refresh: true file-extension: yaml # 配置文件格式,默认为properties
或在bootstrap.properties文件中配置nacos服务器地址和命名空间等信息
# bootstrap.properties spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=your-namespace spring.cloud.nacos.config.group=default_group spring.cloud.nacos.config.data-id=your-data-id spring.cloud.nacos.config.extension-configs[0].data-id=another-data-id spring.cloud.nacos.config.extension-configs[0].group=another_group spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
然后,新建两个文件bootstrap-dev.yaml和bootstrap-prod.yaml,文件内容如下,两个文件内容格式是一样的。
spring: cloud: nacos: discovery: server-addr: localhost:8848 # nacos服务地址 namespace: your-namespace-id # nacos命名空间id group: your-group # 配置分组名称 config: server-addr: localhost:8848 # nacos作为配置中心地址 namespace: your-namespace-id # nacos命名空间id group: your-group # 配置分组名称
在nacos的配置中,discovery和config是两个核心组件,它们各自承担着不同的职责。
(1)discovery(服务发现):
discovery的主要作用是实现服务的自动注册与发现。当服务提供者启动后,它会自动将自己的服务信息注册到nacos中。而服务消费者则可以通过nacos查询和发现可用的服务提供者。这样,服务消费者就能够动态地获取到服务提供者的网络位置(如ip和端口),从而实现服务的调用。
服务发现在微服务架构中非常重要,因为它允许服务之间动态地相互发现和通信,而无需硬编码服务地址。这使得服务能够更灵活地部署和扩展,同时也提高了系统的可用性和容错性。
(2)config(配置管理):
config的主要作用是实现配置信息的集中管理和动态更新。在微服务架构中,通常会有许多服务共享一些公共的配置信息,如数据库连接信息、缓存配置等。
config允许将这些配置信息统一存储在nacos中,并通过配置中心进行管理和分发。当配置信息发生变化时,config能够实时地将最新的配置推送给服务消费者,从而实现配置的动态更新。
配置管理在微服务架构中同样非常重要,因为它允许开发人员在不重启服务的情况下更新配置信息。这大大提高了系统的灵活性和可维护性,同时也降低了运维成本。
(3)区别:
- 服务发现(discovery) 专注于服务的注册与发现,解决的是服务之间的通信问题。它使得服务能够动态地发现和调用其他服务,而无需硬编码服务地址。
- 配置管理(config) 专注于配置信息的集中管理和动态更新,解决的是配置信息的共享和更新问题。它允许开发人员在不重启服务的情况下实时更新配置信息,从而提高了系统的灵活性和可维护性。
原yml文件改造
可以保留程序启动端口。
server: port:1839
3.启动类注解
在spring boot启动类上添加 @enablediscoveryclient 和 @enableconfigserver 注解,开启服务发现和配置管理功能。
@springbootapplication @enablediscoveryclient @enableconfigserver public class yourapplication { public static void main(string[] args) { springapplication.run(yourapplication.class, args); } }
4.使用配置
在spring boot应用中,可以直接通过 @value 或 @configurationproperties 注解注入nacos中的配置。@configurationproperties和@value注解用于获取配置文件中的属性定义并绑定到java bean或属性中。
通过@value(“x x x x ” ) 可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如 @ v a l u e ( “ {xxxx}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@value(“xxxx”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@value(“{xxxx:yyyy}”)。
@configurationproperties注解对属性绑定遵循relaxed bind rule【暂且翻译为松散绑定规则】,并不需要精确匹配。所谓的宽松绑定原则是指:并不是 javabean 中的属性必须要和配置文件中的一致才能绑定数据,context-path 也能绑定到 contextpath 属性上。比如对属性【app.username】,通过【app.username】、【app.user-name】、【app.user_name】、【app.user_name】、【app.user-name】等都可匹配,我们可理解为模糊匹配。
@restcontroller public class configcontroller { @value("${your.config.key}") private string configvalue; @getmapping("/config") public string getconfig() { return configvalue; } } @data // 需要提供默认的构造函数,以及get/setter方法 @configurationproperties("my.service") public class myproperties { // 我们可以简单地用一个值初始化一个字段来定义一个默认值 private boolean enabled = true; private inetaddress remoteaddress; private final security security = new security(); @data public static class security { private string username; private string password; // 如果这个属性配置的话,默认是“user” private list<string> roles = new arraylist<>(collections.singleton("user")); } }
在配置文件中进行如下配置,
my: service: enabled: true remoteaddress: 127.0.0.1 security: username: csx password: passwoed roles: - role1 - role2 your: config: key:ccvvv
5.测试
最后,可以尝试启动项目程序,看看是否能启动成功。如果启动成功则说明成功了。
通过整合nacos,spring boot项目能够轻松实现配置的动态管理和服务的自动发现。nacos的简单易用和强大的功能使其成为微服务架构中不可或缺的一部分。通过本文的介绍和示例代码,读者应该能够掌握spring boot与nacos的集成方法,并在实际项目中高效利用nacos进行服务配置管理。
以上就是springboot使用nacos进行application.yml配置管理详解的详细内容,更多关于springboot application.yml配置管理的资料请关注代码网其它相关文章!
发表评论