Nacos既提供注册中心,也提供配置中心。下面分别以两个例子来说明配置中心的使用。
目录
案例一:配置中心使用
人工在Nacos配置内容
客户端使用
案例二:配置拆分与复用
背景
配置拆分复用说明
对pom.xml增加依赖
删除application.properties,增加bootstrap.properties
启动
调用验证
案例一:配置中心使用
人工在Nacos配置内容
在Nacos中人工定义如下
Data ID: firstapp-dev.properties
Group : DEFAULT_GROUP
配置格式: Properties
配置内容: weather=sun
temperature=20.55
?其中Data ID的命令规则为:应用名-环境profile名.文件后缀
- 应用名(Data ID前缀):默认为? ${spring.appliction.name}, 也可以使用${spring.cloud.nacos.config.prefix}来配置
- 环境profile名:既${spring.profiles.active}指定的环境。? 若不区分环境,则本内容既前面的中划线都可以不用存在。
- 文件后缀:既SpringBoot中配置文件扩展名,也是Nacos中的配置格式。
客户端使用
新建一个project或者module。 在生成的默认pom.xml增加nacos-config和bootstrap依赖。如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>firstapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>firstapp</name>
<description>firstapp</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
?创建bootstrap.properties文件(与application.properties文件同目录存放),bootstrap.properties加载顺序先于application.properties?。bootstrap.properties文件内容如下:
spring.application.name=firstapp
#Data ID的前缀(如果不指定,则默认取 ${spring.appliction.name})
spring.cloud.nacos.config.prefix=firstapp
#指定为开发环境
spring.profiles.active=dev
#配置中心服务器地址
spring.cloud.nacos.config.server-addr=39.100.80.168:8848
#命名空间(由于Bug:若这里指定为public会导致高频刷,指定其他命名空间正常。 Bug链接 https://github.com/alibaba/nacos/issues/3460)
#spring.cloud.nacos.config.namespace=public
#配置组(如果不指定,则默认为DEFAULT_GROUP)
spring.cloud.nacos.config.group=DEFAULT_GROUP
#指定文件后缀(如果不指定,则默认为properties)
spring.cloud.nacos.config.file-extension=properties
?对SpringBoot启动类中,增加获取配置项并输出的代码。
@SpringBootApplication
public class FirstappApplication {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext applicationContext = SpringApplication.run(FirstappApplication.class, args);
while (true) {
String weather = applicationContext.getEnvironment().getProperty("weather");
String temperature = applicationContext.getEnvironment().getProperty("temperature");
System.err.println("weather:" + weather + "; temperature: " + temperature);
TimeUnit.SECONDS.sleep(3);
}
}
}
启动运行后,可以看到SpringBoot程序获得了Nacos配置中心的值。
同时,如果在Nacos界面中人工调整配置项的值,SpringBoot会立即自动取得最新值。因为Nacos带自动刷新功能。
可以通过配置?spring.cloud.nacos.config.refresh.enabled=false ?来关闭动态刷新
案例二:配置拆分与复用
背景
本案例在前一个案例(2.SpringCloud服务注册与调用:Nacos、openFeign、loadbalancer_zyplanke的专栏-CSDN博客)基础上进行注册中心修改。
配置拆分复用说明
在nacos中配置如下三个Data ID:
- commonshare.properties? 放各个服务的公共配置
- paymentService.properties? 放支付服务需要的配置
- orderService.properties? 放订单服务需要的配置
在Nacos中人工定义如上三个Data ID,内容分别如下:
commonshare.properties:
paymentService.properties:
orderService.properties:
对pom.xml增加依赖
------ 前面省略 ------
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${springcloudalibaba.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.4</version>
</dependency>
------ 后面省略 ------
删除application.properties,增加bootstrap.properties
分别删除payment、order服务下的application.properties文件。
在payment服务下新增bootstrap.properties文件,改为从配置中心获取应用程序的配置,bootstrap.properties内容如下:
spring.application.name=payment
#配置中心服务器地址
spring.cloud.nacos.config.server-addr=39.100.80.168:8848
#Data ID的前缀(如果不指定,则默认取 ${spring.appliction.name})
spring.cloud.nacos.config.prefix=paymentService
spring.cloud.nacos.config.group=DEFAULT_GROUP
#指定文件后缀(如果不指定,则默认为properties)
spring.cloud.nacos.config.file-extension=properties
#通用共享配置的信息
spring.cloud.nacos.config.shared-configs[0].data-id=commonshare.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true
? ?在order服务下新增bootstrap.properties文件,内容如下:
spring.application.name=order
#配置中心服务器地址
spring.cloud.nacos.config.server-addr=39.100.80.168:8848
#Data ID的前缀(如果不指定,则默认取 ${spring.appliction.name})
spring.cloud.nacos.config.prefix=orderService
spring.cloud.nacos.config.group=DEFAULT_GROUP
#指定文件后缀(如果不指定,则默认为properties)
spring.cloud.nacos.config.file-extension=properties
#通用共享配置的信息
spring.cloud.nacos.config.shared-configs[0].data-id=commonshare.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true
启动
? ?分别启动payment、order服务。
? ?可以看到payment服务启动端口为9999(从nacos配置中心获得的端口配置);? ?可以看到order服务启动端口为8888(从nacos配置中心获得的端口配置)
调用验证
curl http://localhost:8888/consumer/66
调用Order服务成功,返回信息符合预期。
|