使用nacos cofing集中管理配置信息

nacos config

在微服务架构下每个模块都需要编写很多配置,造成的问题是配置分散,不易管理,nacos config提供了存储配置的功能,开发者可以将模块中的配置信息填写到nacos config里面,这样便于集中管理。

启动nacos之后,在管理页面中可以看到配置管理菜单,我们可以在这里面管理配置信息了。

在项目中添加nacos config依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

由于Nacos config是在启动的bootstrap阶段,将配置加载到Spring环境中,bootstrap配置文件在启动阶段会被读取,优先级大于application,所以需要我们创建bootstrap配置文件,在该文件中填写注册中心相关的配置,这样模块在启动的时候会去链接注册中心从而获取里面的配置信息。

bootstrap.application中的内容,这里主要演示config,所以没有配置注册中心相关的内容:

server.port=8088
spring.application.name=nacos-config-test
#配置nacos config的地址以及用户名密码
spring.cloud.nacos.config.server-addr=192.168.137.1:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos

修改启动类来检验是否可以获取到nacos config中的内容:

ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);

while (true) {
    //模块启动之后会读取nacos config中的配置信息,这里就可以获取到相关的配置内容了
    String userName = applicationContext.getEnvironment().getProperty("user.name");
    String userAge = applicationContext.getEnvironment().getProperty("user.age");
    System.out.println("user name : " + userName + "; age: " + userAge);

    TimeUnit.SECONDS.sleep(3);
}

nacos config自动刷新

修改nacos config中的配置内容之后,无需重启模块即可读取最新的内容,原因是Nacos Config Starter 提供了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法刷新。可以通过下面配置关闭自动刷新

spring.cloud.nacos.config.refresh.enabled=false

使用yaml

可以在nacos config中使用yaml,填写好相关配置之后,需要在bootstrap.properties中添加下面内容,这里的yaml是跟nacos config中的yaml对应:

spring.cloud.nacos.config.file-extension=yaml

当然,我们也可以将bootstrap.properties改成yaml格式的,你可以自己尝试一下。

多环境配置

在开发的时候可能会有多种不同的环境,开发环境,测试环境,生产环境等,在nacos config中亦支持多环境配置。

在nacos config配置中添加一个新的data id,注意要加上后缀名,我们使用yaml格式:

nacos-config-test-dev.yaml

在bootstrap.properties配置文件中添加激活配置,这里的dev跟上面data id中的dev对应,开发中只需修改这里即可灵活切换配置文件了:

spring.profiles.active=dev

nacos data model

在nacos中有下面三个数据模型用来进行配置的隔离,为了方便理解可以将下面三个分别看作是包名,类名,方法名,通过这三点就可以定位具体的方法了。

  • 命名空间,主要用于不同环境的命名,比如开发环境,测试环境等。默认是有一个叫public的命名空间,可以在nacos config页面中点击查看。
  • group,相当于一个特定的场景,比如购买,交易。默认是叫DEFAULT_GROUP,在填写配置的时候可以修改。
  • data id,服务名,在填写配置的时候必须要填入。

之前使用的是默认命名空间+默认group+data id,接下来看看其他组合如何使用。

1.默认命名空间+自定义group+data id

在bootstrap配置文件中添加下面内容,这里的BUY_GROUP要跟nacos中填写的group一致:

spring.cloud.nacos.config.group=BUY_GROUP

2.自定义命名空间+自定义group+data id

在bootstrap配置文件中添加下面的内容,这里的命名空间id要跟nacos中的一致:

spring.cloud.nacos.config.namespace=命名空间的id

nacos数据持久化

上面配置好之后,重启nacos会发现之前配置的数据仍然存在,是因为nacos使用了derby数据库来存储我们配置的内容。后来的nacos版本中添加了对mysql的支持,我们可以配置nacos使用mysql(需要mysql 5.6.6以上的版本):

1.将nacos目录下的conf中的nacos-mysql.sql脚本运行到数据库中

2.修改conf/application.properties,添加mysql相关配置,url,用户名,密码。里面有相关注释掉的内容,可以搜下。

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=111111

3.放开上面文件中这部分的注释

spring.datasource.platform=mysql

这样nacos就会将数据持久化到我们配置的mysql中了。

nacos权限控制

上面配置了命名空间,group,data id之后我们可以在nacos页面中添加用户赋予相应的操作权限,这样就达到了权限控制的目的。