Spring Cloud Alibaba(二) 简单使用nacos配置中心
通过登录NACOS管理后台,左侧菜单有4个大分类:配置管理,服务管理,命名空间,集群管理。我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做的好处是分离的多环境配置,可以更灵活的管理权限,安全性更高。一般我们修改应用程序的配置文件后,需要重启应用才能生效,而nacos是可以再应用中直接刷新,不用重启。
命名空间Namespace
官方说明是:
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
没有明确指定
spring.cloud.nacos.config.namespace配置情况下,模式使用的是public。
上图中创建了两个命名空间,一个DEV,一个TEST.此时在配置列表和服务列表上面可以看到多了DEV和TEST两个标签项。
需要注意的是,我们在应用程序中配置
spring.cloud.nacos.config.namespace是指定其命名空间ID,而非命名空间名称。该配置必须放在
bootstrap.properties 文件中
spring.cloud.nacos.config.namespace=39850848-bd53-47eb-8e4d-0a29de89abe6
本文用于测试,spring.cloud.nacos.config.namespace 的值是 TEST对应的 id。
创建配置
在配置列表菜单中,选择刚创建的TEST命名空间,在这个命名空间下创建新的配置。
说明:Data ID 是以 properties(默认的文件扩展名方式)为扩展名。Data ID 的值默认是对应
${spring.application.name}.properties
Group 默认分组即可,如果是想细分维度的话,这里可以自定义。
配置格式:选择properties,这里对应的是上面Data ID 后缀名
配置内容:根据自己实际填写,这里测试填写一个http.url=https://www.baidu.com/
填写完成后,发布保存。
应用中使用nacos配置
在Spring Cloud Alibaba(一) 简单实现服务注册与发现 文中,我们创建了一个服务消费者的应用,在此基础上,我们进行改造。首先在pom文件中添加spring-cloud-starter-alibaba-nacos-config依赖。
完整的pom文件如下:
<?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.1.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.floyd.nacos.consumer</groupId> <artifactId>springcloud-nacos-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springcloud-nacos-consumer</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </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-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
然后需要创建一个bootstrap.properties配置文件
注意:必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址
#namespace指向的是命名空间的ID , spring.cloud.nacos.config.namespace=39850848-bd53-47eb-8e4d-0a29de89abe6# 配置文件分组,不配置就使用的默认配置DEFAULT_GROUP spring.cloud.nacos.config.group=DEFAULT_GROUP #配置服务器地址,nacos的地址,如果是域名,80端口不能省略 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # 配置文件前缀名称,不配置就会使用 spring.application.name的值 spring.cloud.nacos.config.prefix=consumer-config
application.properties 配置文件内容:
server.port=1889 spring.application.name=nacos-server-consumer spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.namespace=39850848-bd53-47eb-8e4d-0a29de89abe6 management.endpoints.web.exposure.include=*
创建一个config类:
@Component @Data @RefreshScope //刷新配置属性的值 public class Config { @Value ("${http.url}") private String url; }
改造一下TestController,代码如下:
import com.floyd.nacos.consumer.config.Config; import com.floyd.nacos.consumer.service.TestService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * 注释 * * @author floyd * @version : TestController.java, v 0.1 2019/10/11 9:50 By floyd Edit $$ */ @RestController @Slf4j public class TestController { @Autowired private RestTemplate restTemplate; @Autowired(required = false) private TestService echoService; @Autowired private Config config; /** * nacos配置测试 * @return */ @GetMapping (value = "/config-test") public String testConfig (){ log.info ("nacos配置文件属性http.url={}",config.getUrl ()); return config.getUrl (); } /** * RestTemplate 请求 * @param str * @return */ @GetMapping (value = "/echo-rest/{str}") public String rest(@PathVariable String str) { String result = restTemplate.getForObject("http://nacos-server-provider/echo/" + str, String.class); log.info ("服务生产者返回的结果:{}",result); return result; } /** * FeignClient 请求 * @param str * @return */ @GetMapping(value = "/echo-feign/{str}") public String feign(@PathVariable String str) { return echoService.echo(str); } }
启动应用,浏览器访问 http://localhost:1889/config-test 后台打印日志结果显示与前面我们配置的http.url值一直
在nacos后台修改配置文件,查看应用中是否能获取最新的值。将http.url值修改成 http://www.163.com
然后确认发布。
再次浏览器访问 http://localhost:1889/config-test ,后台日志结果可以发现属性值已经刷新了。
yaml 的文件扩展名配置方式
spring-cloud-starter-alibaba-nacos-config 对于 yaml 格式也是完美支持的。
在nacos服务的控制台添加yaml方式的配置,详情如下:
我们来修改一下Config类:
@Component @Data @RefreshScope @ConfigurationProperties(prefix = "http") public class Config { private String url; private String name; }
这里url 和name 就是对应的nacos配置文件中的两个属性。通过
@ConfigurationProperties注解可以直接注入进来。然后再来修改一下TestController 中的testConfig()方法:
/** * nacos配置测试 * @return */ @GetMapping (value = "/config-test") public String testConfig (){ log.info ("nacos配置文件属性http.url={}",config.getUrl ()); log.info ("nacos配置文件属性http.name={}",config.getName ()); return config.getUrl (); }
完成后启动应用,通过浏览器访问 http://localhost:1889/config-test,结果如下:
Data Id 规则
在 bootstrap.properties 文件中,我们通过
spring.cloud.nacos.config.prefix来指定了文件的前缀名称
在nacos控制台里,Data ID 的值 是
${spring.cloud.nacos.config.prefix}.后缀名(properties/yaml)。如果没有设置此参数 则是
${spring.application.name}.后缀名(properties/yaml)。
在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active}
这个配置项来配置。这个属性需必须要放在 bootstrap.properties 文件中
在nacos配置列表中增加一个Data ID为 yaml-consumer-config-dev.yaml 配置文件,bootstrap.properties文件增加一个spring.profiles.active 属性
spring.profiles.active=dev
在生成环境下的 Naocs 添加了dataid为:yaml-consumer-config-pro.yaml的配置,bootstrap.properties文件增加一个spring.profiles.active 属性
spring.profiles.active=pro
真正的项目实施过程中这个变量的值是需要不同环境而有不同的值。这个时候通常的做法是通过 -Dspring.profiles.active= 参数指定其配置来达到环境间灵活的切换。
以上的配置方法,可以满足大部分用户的需求了。官方还支持自定义扩展的 Data Id 配置,有需要的话可以 查看深入研究一下。
参考
https://github.com/alibaba/spring-cloud-alibaba/wiki
刚入坑学习记录一下,如果错误不足,欢迎指出。
Spring Cloud Alibaba 系列学习笔记
Spring Cloud Alibaba(一) 简单实现服务注册与发现
Spring Cloud Alibaba(二) 简单使用nacos配置中心
Spring Cloud Alibaba(三)简单接入Sentinel(Sentinel 控制台)
Spring Cloud Alibaba(四)简单接入Sentinel(fallback用法)
Spring Cloud Alibaba(五)简单接入Sentinel(blockHandler 用法)
- 点赞
- 收藏
- 分享
- 文章举报
- Spring Cloud Alibaba nacos 配置中心使用
- SpringCloud Alibaba Nacos作为配置中心(九)--------简单登录功能
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- SpringCloud Alibaba Nacos作为配置中心(六)(1)--------自定义扩展的 Data Id 配置
- Spring Cloud Alibaba 使用nacos 注册中心
- SpringCloud Alibaba Nacos作为配置中心(三)----------yml格式配置文件
- Spring Cloud Alibaba实现服务配置管理和动态服务发现(使用Nacos)
- SpringCloud Alibaba Nacos作为配置中心(五)--------自定义GROUP--自定义命名空间
- SpringCloud Alibaba Nacos作为配置中心(八)--------集群部署
- SpringCloud Alibaba Nacos作为配置中心(一)-----------单机模式启动Server端
- SpringCloud Alibaba Nacos作为配置中心(四)-----------不同环境下切换配置文件
- SpringCloud Alibaba Nacos作为配置中心(七)--------采用mysql数据库
- SpringCloud Alibaba Nacos作为配置中心(十)--------自定义登录用户名和密码
- SpringCloud Alibaba Nacos作为配置中心(六)(2)--------自定义扩展的 Data Id 配置 结合 配置不同环境
- SpringCloud Alibaba Nacos作为配置中心(二)-----------配置Nacos客户端
- Spring Cloud Alibaba从入门到放弃-Nacos构建配置中心
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
- 非spring boot (即spring) 使用/集成 Spring cloud Config 分布式配置中心
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)