一、背景
公司项目中使用的Nacos作为服务的注册中心和配置中心,但是呢公司的这一套Nacos是经过封装了的,而且封装的不是很友好,想着自己搭建一套标注的Nacos配置中心和服务中心
二、Nacos配置中心和注册中心搭建
2.1 依赖引入
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2021.0.5.0
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
2021.0.5.0
org.springframework.cloud
spring-cloud-starter-bootstrap
3.0.4
这里需要注意下SpringBoot的版本,不然jar包会有冲突,我这里使用的SpringBoot的版本是这个
org.springframework.boot
spring-boot-starter-parent
2.6.13
为什么要引入spring-cloud-starter-bootstrap的依赖呢?
答:因为在配置完Nacos注册中心和配置中心后,启动的时候报错如下错误,网上搜了一堆才找到回答。
SpringBoot和SpringCloud版本对应关系:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
2.2 application.yml配置
server:
port: 9999
spring:
cloud:
nacos:
discovery: #nacos服务注册的配置
server-addr: 127.0.0.1:8848
register-enabled: true
namespace: da8ba5de-6fd4-428c-9e64-7dcb38d28805
profiles:
active: dev
2.3 bootstrap.properties配置
#nacos配置中心的相关配置
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=da8ba5de-6fd4-428c-9e64-7dcb38d28805
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
#注意:应用的名称必须要在这里配置;不然在修改了Nacos配置之后,无法实时更新配置信息
spring.application.name=demo
2.4 启动入口加注解
加入@EnableDiscoveryClient注解
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {"com.example"})
@MapperScan({"com.example.demo.mapper"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2.5 Nacos配置类
网上很多直接使用@Value注解的,但是在实际使用的过程中,发现@Value注解会导致更改了的配置不会实时刷新,所以最好是@RefreshScope和@ConfigurationProperties配合一起使用。
@RefreshScope
@Data
@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoPropertites {
private String test;
}
@RestController
@RequestMapping("/nacos")
public class NacosController {
@Resource
private DemoPropertites demoPropertites;
@RequestMapping("/config")
public String getConfig(){
return demoPropertites.getTest();
}
}
2.6 启动本地Nacos服务
2.6.1 本地Nacos服务下载
Releases · alibaba/nacos · GitHub
我这边使用的是nacos-server-2.2.2版本的,刚开始使用的是1.4.5版本,发现有问题
2.6.2 本地Nacos启动
直接参考官网的启动方式:https://github.com/alibaba/nacos
2.7 本地Nacos访问
localhost:8848/nacos 账号:nacos 密码:nacos
2.8 创建Nacos命名空间
如果不创建命名空间的话,默认使用的是pulic保留空间;我创建了一个dev的命名空间
2.9 创建配置文件
在dev命名空间下,创建demo.yaml配置文件;注意Data Id的命名,默认情况是${spring.application.name}.${spring.cloud.nacos.config.file-extension}
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
spring.application.name:应用的名称
spring.profiles.active:当前启动的环境
spring.cloud.nacos.config.file-extension:nacos配置文件的后缀,支持yaml和properties
2.10 启动项目
启动完成后Nacos会监听如下三个文件,如果有改动,则会更新配置文件信息
修改配置后,nacos数据获取:
服务注册:
3. Nacos多环境配置
主要有以下三个环境的配置文件
开发环境:bootstrap-dev.properties
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=da8ba5de-6fd4-428c-9e64-7dcb38d28805
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.namespace=da8ba5de-6fd4-428c-9e64-7dcb38d28805
测试环境:bootstrap-test.properties
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=52990b07-f6dd-4f24-b2e3-2523516d368b
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.namespace=52990b07-f6dd-4f24-b2e3-2523516d368b
生产环境:bootstrap-pro.properties
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.namespace=4d73106d-10f7-4893-bd75-a8b12244304d
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.namespace=4d73106d-10f7-4893-bd75-a8b12244304d