一.概述
1.何谓分布式配置中心?
通俗的来说就是在分布式系统中,有一个集中的配置文件管理中心,其他的组件从配置中心读取配置,想修改组件的配置,可以通过修改配置中心的配置来实现修改组件的配置.
2.为什么使用nacos?
(1) nacos是alibaba的项目(值得信赖).
(2) 支持国产.
(3) 文档学习成本低(有中文文档).
(4) nacos属于alibaba自用,淘宝的并发量以14亿中国人为基础堪称世界之最.
二.server-user服务配置文件部分迁移到nacos配置中心.
1.nacos的官方文档.
https://nacos.io/zh-cn/docs/quick-start.html.
2.nacos中的一些名词.
(1) group组的概念.
(2) namespace名称空间的概念.
这里我不一一解释何谓组,何谓namespace,都是字面意思,放在实际生产中,可以用来区分环境,比如dev组、test组和prod组,dev名称空间、test名称空间和prod名称空间,当然我们也可以不这样使用(比如我们用微信,微信有非常的多的功能,但是我们一般用来聊天).
3.配置规则.
(1) 官方文档的部分截图,过于学术化,我第二点说得通俗一点.
(2) 就是让我们的微服务去nacos上读取配置,nacos提供了两种方案.
a.默认加载的配置文件.
默认加载的配置文件名称为${prefix}-${spring.profile.active}.${file-extension},意思就是假设我们的服务名称为server-user,那么默认从nacos注册中心上默认加载server-user.yml.
b.手动配置的配置文件.
手动配置的配置文件,当然就是需要我们在application/bootstrap.yml中写好nacos中对应的配置文件名称.
4.server-user服务用nacos作为配置中心(默认配置文件).
(1) server.pom中引入nacos配置中心客户端依赖.
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
(2) application.yml文件更名为bootstrap.yml
a.为什么要改?
nacos这么定义的,从bootstrap.yml中读取nacos配置中心的配置信息(人家这么写的你怪谁).
b.bootstrap.yml和application.yml在springboot中有什么区别?
bootstrap.yml见名知义是系统级别的,application.yml是应用级别的,springboot工程启动的时候会先加载bootstrap.yml再加载application.yml.
(3) yml中配置注册中心的ip,加入了spring.cloud.nacos.config
server:
port: 1002 #服务端口
spring:
application:
name: server-user #服务名称
datasource:
username: root
password: Test2016@
url: jdbc:mysql://47.6.11.185:3306/user?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true
type: com.alibaba.druid.pool.DruidDataSource
cloud:
nacos:
discovery:
server-addr: 47.96.131.85:8848
config:
server-addr: 47.6.131.185:8848 #nacos config配置中心ip和端口
file-extension: yaml #文件扩展名格式,针对于默认的{spring.application.name}-${profile}.${file-extension:properties}配置
enabled: true #开启或关闭配置中心
mybatis-plus:
typeAliasesPackage: com.ccm.server.user.dao.mysql.domain #数据库实体类包
mapper-locations: classpath:mappering/*.xml #xml文件扫描
(4) nacos上创建默认会加载的配置文件server-user.yml
(5) 测试代码编写.
package com.ccm.server.user.controller;
import com.ccm.common.exception.result.ResultSet;
import com.ccm.server.user.service.TestService;
import com.mysql.cj.protocol.Resultset;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description nacos测试控制层
* @Author ccm
* @CreateTime 2020/7/16 21:59
*/
@Api(tags = "nacos测试")
@RestController
@RequestMapping(value = "nacosTest")
public class NacosTestController {
@Value("${server-user.testConstant}")
private String aa;
/**
* @Description nacos加载默认的配置文件
* @Author ccm
* @CreateTime 2020/7/16 21:59
* @Params []
* @Return java.lang.Object
*/
@ApiOperation(value = "从nacos加载默认的配置文件测试")
@GetMapping(value = "test01")
public ResultSet test01() {
return ResultSet.success(aa);
}
}
(6)swagger测试.
读取到了nacos中server-user这个配置文件的配置,成功.
5.server-user服务用nacos作为配置中心(自定义配置文件).
(1) 要求:把server-user的数据库配置文件迁移到nacos中.
(2) nacos上面新建mysql-user.yaml的配置文件.
(3)删除bootstrap.yml中的数据库相关配置.
server:
port: 1002 #服务端口
spring:
application:
name: server-user #服务名称
cloud:
nacos:
discovery:
server-addr: 47.96.131.15:8848
config:
server-addr: 47.96.131.85:8848 #nacos config配置中心ip和端口
file-extension: yaml #文件扩展名格式,针对于默认的{spring.application.name}-${profile}.${file-extension:properties}配置
enabled: true #开启或关闭配置中心
(3)配置要从nacos中加载哪些配置文件.
server:
port: 1002 #服务端口
spring:
application:
name: server-user #服务名称
cloud:
nacos:
discovery:
server-addr: 47.96.11.185:8848
config:
server-addr: 47.96.131.18:8848 #nacos config配置中心ip和端口
file-extension: yaml #文件扩展名格式,针对于默认的{spring.application.name}-${profile}.${file-extension:properties}配置
enabled: true #开启或关闭配置中心
shared-dataids: mysql-user.yaml #自定义的配置文件dataid,以逗号分隔
refreshable-dataids: mysql-user.yaml #自定义的配置文件dataid实现自动刷新,以逗号分隔(其实就是热加载配置文件)
(4)编写测试代码,见test02()(能够正常访问数据库说明配置生效).
package com.ccm.server.user.controller;
import com.ccm.common.exception.result.ResultSet;
import com.ccm.server.user.dao.mysql.mapper.TestTableMapper;
import com.ccm.server.user.service.TestService;
import com.mysql.cj.protocol.Resultset;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description nacos测试控制层
* @Author ccm
* @CreateTime 2020/7/16 21:59
*/
@Api(tags = "nacos测试")
@RestController
@RequestMapping(value = "nacosTest")
public class NacosTestController {
@Value("${server-user.testConstant}")
private String aa;
@Autowired
private TestTableMapper testTableMapper;
/**
* @Description nacos加载默认的配置文件
* @Author ccm
* @CreateTime 2020/7/16 21:59
* @Params []
* @Return java.lang.Object
*/
@ApiOperation(value = "从nacos加载默认的配置文件测试")
@GetMapping(value = "test01")
public ResultSet test01() {
return ResultSet.success(aa);
}
@ApiOperation(value = "从nacos加载自定义配置文件测试")
@GetMapping(value = "test02")
public ResultSet test02() {
return ResultSet.success(testTableMapper.list());
}
}
(5)swagger测试.
没毛病,至此完事.
源码地址:https://gitee.com/chouchimoo/ccm-mall.git(本章节代码分支:zj-13)
您的点赞、收藏、转发和关注是我持续创作的动力!