专栏名称: 猿天地
公众号 猿天地
目录
相关文章推荐
乌兰察布云  ·  微信新功能!可删除所有单向好友 ·  昨天  
广西应急管理  ·  投票啦!这些作品榜上有名! ·  2 天前  
广西应急管理  ·  投票啦!这些作品榜上有名! ·  2 天前  
中工网  ·  奥斯卡评委喊话饺子导演 ·  3 天前  
中工网  ·  奥斯卡评委喊话饺子导演 ·  3 天前  
51好读  ›  专栏  ›  猿天地

Spring Cloud Alibaba Nacos Config

猿天地  · 掘金  ·  · 2019-08-20 14:46

正文

阅读 38

Spring Cloud Alibaba Nacos Config

前言

前面我们学习了如何在Spring Boot中使用Nacos来管理配置,整体来说还是比较简单。

为了能够在Spring Cloud中更加方便的使用Nacos,今天介绍下在Spring Cloud中如何简单,快速,方便的使用Nacos。

使用

需要在项目中加入spring-cloud-starter-alibaba-nacos-config的Maven依赖。

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Greenwich.SR2</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-parent</artifactId>
			<version>2.1.6.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
		<version>0.9.0.RELEASE</version>
	</dependency>
</dependencies>
复制代码

版本选择请参考下面的规范:

由于 Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且 spring-cloud-commons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟 SpringBoot 版本号一致的版本:

1.5.x 版本适用于 Spring Boot 1.5.x 2.0.x 版本适用于 Spring Boot 2.0.x 2.1.x 版本适用于 Spring Boot 2.1.x

在bootstrap.properties中配置Nacos的信息,切记是bootstrap.properties不是application.properties,原因你可以自己体验下。

# 应用名称,用于配置文件命名
spring.application.name=example
# Nacos server 的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 配置内容的数据格式
spring.cloud.nacos.config.file-extension=properties
# 指定对应的环境
spring.profiles.active=test
复制代码

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
复制代码

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

然后我们在Nacos的后台创建一个配置,dataId为example-test.properties

useLocalCache=false
复制代码

再创建一个example-dev.properties

useLocalCache=true
复制代码

测试代码:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }

}
复制代码

配置变更需要刷新的话记得加上@RefreshScope注解。加载对应环境的配置是根据spring.profiles.active=test的值进行加载,当我们指定test后,useLocalCache的值为false, 当spring.profiles.active=dev时,useLocalCache的值为true

方便的点在于不用启动时指定namespace来区分环境,而是跟Spring Boot中的spring.profiles.active进行了整合。

多Data-Id的使用

如果我们需要加载多个配置文件,可以用ext-config来配置

spring.cloud.nacos.config.ext-config[0].data-id=app.properties
spring.cloud.nacos.config.ext-config[0].group=multi-data-ids
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=user.properties
spring.cloud.nacos.config.ext-config[1].group=multi-data-ids
spring.cloud.nacos.config.ext-config[1].refresh=true
复制代码

nacos-config端点

spring-cloud-starter-alibaba-nacos-config内置了nacos-config端点,可以通过nacos-config端点查看配置相关信息,源码在org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpoint

{
  "NacosConfigProperties": {
    "serverAddr": "127.0.0.1:8848", 
    "encode": null, 
    "group": "DEFAULT_GROUP", 
    "prefix": null, 
    "fileExtension": "properties", 
    "timeout": 3000, 
    "endpoint": null, 
    "namespace": null, 
    "accessKey": null, 
    "secretKey": null, 
    "contextPath": null, 
    "clusterName": null, 
    "name": null, 
    "sharedDataids": null, 
    "refreshableDataids": null, 
    "extConfig": [
      {
        "dataId": "example.properties", 
        "group": "DEFAULT_GROUP", 
        "refresh": true
      }, 
      {
        "dataId": "student.properties", 
        "group": "DEFAULT_GROUP", 
        "refresh": true
      }
    ]
  }, 
  "RefreshHistory": [], 
  "Sources": [
    {
      "lastSynced": "2019-08-18 13:07:42", 
      "dataId": "student.properties"
    }, 
    {
      "lastSynced": "2019-08-18 13:07:42", 
      "dataId": "null-test.properties"
    }, 
    {
      "lastSynced": "2019-08-18 13:07:42", 
      "dataId": "null.properties"
    }, 
    {
      "lastSynced": "2019-08-18 13:07:42", 
      "dataId": "example.properties"
    }
  ]
}
复制代码

NacosConfigHealthIndicator

spring-cloud-starter-alibaba-nacos-config内置了Nacos健康状态检查的实现,当Nacos出现故障时,能够及时通过actuator/health进行反馈,源码在org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigHealthIndicator


  "status": "UP", 
  "details": {
    "diskSpace": {
      "status": "UP", 
      "details": {
        "total": 249795969024, 
        "free": 12436131840, 
        "threshold": 10485760
      }
    }, 
    "nacosConfig": {
      "status": "UP", 
      "details"






请到「今天看啥」查看全文