nacos 官网:https://nacos.io/
使用步骤
1、导入依赖
<!-- 默认父工程引入了springcloud依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、在bootstrap.properties中添加配置
或则bootstrap.yml/yaml中
添加 nacos的server地址和 应用名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
这两步完成之后就可以使用nacos作为配置中心了。
没有配置namespace,默认在public下。
没有配置文件名相关属性,默认配置文件名: ${prefix}-${spring.profiles.active}.${file-extension}
也会读取 ${prefix}.${file-extension} 文件,读取顺序是先读${prefix}.${file-extension}。所以相同配置最终以 ${prefix}-${spring.profiles.active}.${file-extension}中的配置为准。
项目中使用
鉴权
如果nacos开启了鉴权,则需要在配置文件中做以下配置
spring:
cloud:
nacos:
username: nacos
password: nacos
修改命名空间
例如,一个nacos同时跑开发环境和测试环境,我们就需要不同的命名空间进行区分,不能都放在默认命名空间public中。
首先需要在nacos中创建不同的命名空间,然后将命名空间id配置在配置文件中。
spring:
cloud:
nacos:
config:
namespace: d0ee46c1-bb2d-4ceb-a0c2-b3c01d637bbf # 命名空间id
修改配置文件名
比如在本地跑代码进行自测,我需要自己的配置文件,我就可以修改文件名的prefix配置
# 表示读取的配置文件名为 binson.yaml和 binson-dev.yaml
spring:
cloud:
nacos:
username: nacos
password: nacos
config:
preifx: binson
file-extension: yaml
profiles:
active: dev
共享配置文件
微服务项目有很多,但都用的是同一个中间件,如redis、mq等。这就需要每个微服务的配置都相同,这种情况我们就可以使用共享配置文件。将redis的共享配置文件放在redis.yaml种,mq的放在xxxmq.yaml。然后各个项目再去引用这些配置,就不需要在每个微服务中都去配置。
spring:
cloud:
nacos:
config:
shared-configs[0]:
data-id: redis.yaml
refresh: true # 支持实时更新
shared-configs[1]:
data-id: xxxmq.yaml
refresh: true
...
# 注意:以前配置是spring.cloud.nacos.config.shared-dataids: redis.yaml,xxxmq.yaml,之后的版本被上面的配置取代了
实现配置实时更新
在类上加@RefreshScope注解即可。
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
或者配置类上,这样注入的这个配置对象的配置就是实时更新的。
@Data
@Component
@ConfigurationProperties(prefix = "refreshscope.test")
@RefreshScope
public class RefreshScopeTestConfig {
private String config1;
private String config2;
}
小结
掌握了以上这些nacos作为配置中心的使用,那在实际项目中使用就应该没有问题了。后续应该还会出nacos作为配置中心的原理篇,敬请关注!让我们一起进步。