Nacos简介
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
网络上对于Nacos的介绍很多,这里不做过多介绍
地址:https://github.com/alibaba/nacos
例子:https://github.com/nacos-group/nacos-examples
Nacos集成SpringBoot
参考nacos-spring-cloud-example例子为主
软件包引入
<properties>
<spring-boot.version>2.0.4.RELEASE</spring-boot.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意spring-boot.version,spring-cloud.version版本号必须匹配引入,否则在运行时会报错
具体版本信息可参考如下链接:https://spring.io/projects/spring-cloud#overview
服务发现配置依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.0</version>
</dependency>
服务热配置依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
项目配置
注意nacos的配置必须在文件bootstrap中,否则热配置不起作用
spring:
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:192.168.0.109}:${NACOS_PORT:8848}
username: nacos
password: nacos
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yml
namespace: @nacos.namespace@
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
username: ${spring.cloud.nacos.discovery.username}
password: ${spring.cloud.nacos.discovery.password}
profiles:
active: @profiles.active@
在这个配置中:
@artifactId@:项目中配置的artifactId值
@profiles.active@:默认为dev,可在顶级pom中配置
@nacos.namespace@:默认为public,正式部署时,可以修改为如4b70485d-72dd-44df-a76a-7a3f578a3001等值
注意:shared-configs为项目可引用的公共配置,在实际开发中可以将项目公共的配置部分单独提取出来
配置原理
项目默认的配置名(dataId)格式为: p r e f i x − {prefix}- prefix−{spring.profiles.active}.${file-extension}其中
- ${prefix}:spring.application.name,如mall4cloud-product
- ${spring.profiles.active}:spring.profiles.active,如dev,test等
- ${file-extension}:spring.cloud.nacos.config.file-extension,如yaml,properties等
在项目启动时,nacos会远程获取对应的配置,并且和本地的application.yaml配置合并,组合成最新的配置数据
配置截图
代码中配置自动刷新
默认配置刷新
自动刷新配置(dataId=
p
r
e
f
i
x
−
{prefix}-
prefix−{spring.profiles.active}.${file-extension})文件配置
如:mall4cloud-product.yml中配置
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
关注注解:@RefreshScope
自定义配置刷新
@NacosConfigurationProperties(dataId = "demo.yaml", autoRefreshed = true)
public class DemoConfig {
private String name;
private int limit;
}
注意:
- NacosConfigurationProperties注解只支持基本类型,不支持如list,map,自定义等复杂类型
- 使用NacosConfigurationProperties注解,需要配置EnableNacosConfig注解
总结
- 在SpringBoot中,Nacos配置一定要配置在bootstrap文件中
- Nacos支持最基本配置,不直接支持自定义等复杂配置
- 如果要支持复杂配置,需要借助Nacos相关API自己实现