一、配置中心
nacos有两大功能:注册中心和配置中心
nacos的中文文档:https://nacos.io/zh-cn/docs/open-api.html
1、配置文件的缺点
(1)生产环境的数据库的用户名和密码都配置在配置文件中,所有开发人员都能看到密码,这就造成了一定的安全隐患;
(2)配置文件修改之后服务必须重启才可以生效,若生产环境上有一个开关需要打开,修改完配置文件再重启服务,那风险太大了;
2、配置中心的特点
(1)实现不同环境不同配置的统一管理;
(2)配置属性修改后自动刷新;
二、配置中心的使用
1、配置中心
步骤1:增加maven依赖
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-config</artifactId>
</dependency>
步骤2:增加一个名为 bootstrap.yml 配置文件
bootstrap.yml 文件优先于 application.yml 文件加载;
bootstrap.yml 文件的内容,如下:
spring:
cloud:
nacos:
config:
server-addr: 192.168.172.20:8848
file-extension: yml
application:
name: order-center
profiles:
active: dev
(1)配置文件的说明:
spring.cloud.nacos.config.server-addr=192.168.1.1:8848,表示微服务从哪个配置中心上拉取配置;
spring.cloud.nacos.config.file-extension=yml,表示文件的扩展名;
spring.application.name=order-center,表示当前服务向配置中心索要 order-center 的配置;
spring.profiles.active=dev,表示像配置中心索要哪个环境的配置;
索要文件的格式为:
{spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension}
(2)以上配置,向配置中心拉取的配置的 dataId 的名称为: order-center-dev.yml
步骤3:在 nacos 的配置列表中增加一个 Data ID 名为 order-center-dev.yml 的配置
@RefreshScope
@RestController
@Slf4j
@RefreshScope
public class OrderController {
@Value("${env.name}")
private String envName;
@Autowired
private ProductCenterFeignApi productCenterFeignApi;
@GetMapping("/v1/getProduct/{id}")
public String getProduct(@PathVariable("id") String id) {
log.info("------- envName: {} -------", envName);
Person person = productCenterFeignApi.getPerson(id);
return person.toString();
}
}
2、通用配置
(1)同一个服务的通用配置
通常我们的开发在开发环境、测试环境、生产环境都有很多相同的配置,使用注册中心怎么配置呢?
在配置中心新增一个不带 profiles 的配置,格式如下:
{spring.application.name}.{spring.cloud.nacos.config.file-extension}
那针对以上的配置,Data ID 的名称命名为:order-center.yml
启动 order-center 服务之后,打印日志如下:
我们创建的 order-center.yml 配置就是通用配置,不管启动 dev,还是prod,都会加载该配置中的内容。
配置的优先级:精准配置 会覆盖 与通用配置 相同的配置,然后再和通用配置互补。
(2)不同服务的通用配置
我们两个服务 order-center 和 product-center 都会注册到同一个注册中心上,那么他们的注册中心配置就是一样的,我们可以给不同服务设置通用配置。
步骤1:配置文件中增加 shared-dataids 和 refreshable-dataids 配置
spring:
cloud:
nacos:
config:
server-addr: 192.168.172.20:8848
file-extension: yml
shared-dataids: common.yml, common2.yml
refreshable-dataids: common.yml, common2.yml
同一个配置项先加载后面的,可以在服务启动类中查看。
b.c.PropertySourceBootstrapConfiguration : Located property source:
CompositePropertySource {name='NACOS',
propertySources=[
NacosPropertySource {name='order-center-dev.yml'},
NacosPropertySource {name='order-center.yml'},
NacosPropertySource {name='common2.yml'},
NacosPropertySource {name='common.yml'}
说明:order-center-dev.yml 精准匹配;order-center.yml 同工程不同环境的通用配置;shared-dataids 不同工程通用配置;
步骤2:在nacos的配置列表中新增配置,common.yml 和 common2.yml
3、配置回滚
在nacos的配置列表中有一个”历史版本“,可以回滚配置
4、nacos的密码修改或添加新的用户
(1)maven增加如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
(2)java代码对密码进行加密:
public static void main(String[] args) {
String password = new BCryptPasswordEncoder().encode("password");
System.out.println(password);
}
5、连接 Nacos 内置的 apache Derby 数据库