一、配置中心

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 的配置

nacos配置java jvm nacos配置中心密码加密_nacos配置java jvm

@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

nacos配置java jvm nacos配置中心密码加密_nacos配置java jvm_02

启动 order-center 服务之后,打印日志如下:

nacos配置java jvm nacos配置中心密码加密_spring_03

我们创建的 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

nacos配置java jvm nacos配置中心密码加密_配置文件_04

nacos配置java jvm nacos配置中心密码加密_生产环境_05

3、配置回滚

在nacos的配置列表中有一个”历史版本“,可以回滚配置

nacos配置java jvm nacos配置中心密码加密_spring_06

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 数据库

 

nacos配置java jvm nacos配置中心密码加密_nacos配置java jvm_07