参考于:https://nacos.io/zh-cn/docs/quick-start-spring-boot.html
Maven依赖
代码语言:javascript复制 <!-- SpringBoot 整合Nacos-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
Demo 1:测试一下能够读取到Nacos上的配置文件
代码语言:javascript复制import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import java.util.Properties;
public static void main(String[] args) throws NacosException {
// DataID
String dataId = "Mytest01";
// Group
String group = "com.xunliao";
// Nacos 地址
String addr = "127.0.0.1:8848";
// 构造获取配置对象方法需要的参数
Properties properties = new Properties();
properties.setProperty("serverAddr",addr);
// 获取配置对象
ConfigService configService = NacosFactory.createConfigService(properties);
// 拿出配置文件数据 第三个参数是超时时间
String config = configService.getConfig(dataId, group, 5000);
System.out.println(config);
}
Nacos 配置管理模型
Namespace :命名空间
Group :配置组。 一般就是父模块名即可。
Data ID :配置集。就是 spring.application.name
可以上述三个元素决定一个配置集
什么是配置集 Data ID 呢?
一个配置文件就是一个配置集,建议设定为模块名! 配置中对应:spring.application.name
什么是配置项呢?
配置集的每一个配置内容就是配置项
什么是配置组 Group?
配置集分组,通常用来定义为 父项目的名称
什么是命名空间 Namespace? 默认命令空间是 public
用于不同环境之间的隔离。通常用来分为 开发环境、测试环境、生产环境!
Demo 2 指定”命名空间“获取配置文件
代码语言:javascript复制 public static void main(String[] args) throws NacosException {
// DataID
String dataId = "Mytest01";
// Group
String group = "com.xunliao";
// Nacos 地址
String addr = "127.0.0.1:8848";
// Namespace
String namespaseid = "e60c3bd8-1350-419a-b572-fe687e77dfd0";
// 构造获取配置对象方法需要的参数
Properties properties = new Properties();
properties.setProperty("serverAddr",addr);
properties.setProperty("namespace",namespaseid);
// 获取配置对象
ConfigService configService = NacosFactory.createConfigService(properties);
// 拿出配置文件数据 第三个参数是超时时间
String config = configService.getConfig(dataId, group, 5000);
System.out.println(config);
}
结论:对比Demo1、Demo2 就可以得出 不指定命名空间,默认是 public 默认空间
配置文件额外操作
导出(选中一个Data组)
导入(向任何的命名空间导入之前导出的文件)
克隆(等价于导出、导入的操作)
历史版本(误操作,可以快速恢复,我个人建议尽量不要操作回滚,以免误操作)、
监听查询(可以查看当前的服务端)
Demo3 监控Nacos配置文件变更
代码语言:javascript复制 public static void main(String[] args) throws NacosException {
// DataID
String dataId = "Mytest01";
// Group
String group = "com.xunliao";
// Nacos 地址
String addr = "127.0.0.1:8848";
// Namespace
String namespaseid = "e60c3bd8-1350-419a-b572-fe687e77dfd0";
// 构造获取配置对象方法需要的参数
Properties properties = new Properties();
properties.setProperty("serverAddr",addr);
properties.setProperty("namespace",namespaseid);
// 获取配置对象
ConfigService configService = NacosFactory.createConfigService(properties);
// 拿出配置文件数据 第三个参数是超时时间
String config = configService.getConfig(dataId, group, 5000);
// 输出当前获取到的配置文件
System.out.println(config);
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
// 当配置有变化的实话,执行此方法
@Override
public void receiveConfigInfo(String s) {
System.out.println("配置文件已变更!变更后的结果是:");
System.out.println(s);
}
});
// 不让Main方法 主线程停止,进而保证Listener线程 终止导致Listener无法监控数据变化
while (true){
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
修改Nacos密码、创建用户
Nacos 密码我们之前保存到数据库中,我们进入数据库,更替密码即可。算法是 BCrypt 目前没有在线生成的方式,所以我们有2种方式实现修改Nacos密码。
1、去Nacos控制台网页修改密码 推荐,修改完本账号会里面T下去自己。
2、去使用算法 生成密码,然后更新nacos_config库中users密码,不过不能直接踢下去老帐号。
代码语言:javascript复制 <dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.5.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
@Test
public void getBCryiptPassword(){
String password = new BCryptPasswordEncoder().encode("新密码");
System.out.println(password);
}
创建自己的用户,建议去Nacos控制台网页创建用户。
关闭登录验证 ,人人接可登录
代码语言:javascript复制暂时没实现,当前版本较为复杂,好像新版本受到了限制!
整合Demo:SpringCloud 整合配置中心 获取文件
代码语言:javascript复制 <!-- 让bootstrap优先加载于applicaiton-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>
<!-- Spring Cloud依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Nacos配置中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
配置 bootstrap.application
代码语言:javascript复制# 一共指定了Nacos的命名空间、Data Id、组
server.port=18888
# Nacos的配置 application.name就是Data Id
spring.application.name=parents-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 不加此项就会找默认 public的命名空间,如果需要指定其他命名空间,请填写命名空间的ID
spring.cloud.nacos.config.namespace=9449b8dc-6aed-4fc8-b551-1e0d812caba4
# 不加此项就会找默认 DEFAULT_GROUP的组,如果需要指定其他组,请填写组的名字
spring.cloud.nacos.config.group=xunliao
测试代码
代码语言:javascript复制/**
* @author : zanglikun
* @date : 2021/9/7 15:06
* @Version: 1.0
* @Desc : 访问自己的接口,看看是否能够获取到新配置文件的内容。
*/
@Controller
@RequestMapping("/nacos")
//实现配置、实例热加载。
@RefreshScope
public class ConfigController {
//如果直接使用@Value的话,如果启动的时候配置文件没有键就会找不到导致项目无法启动!如果启动时有,后续删除,也会报错的,但项目不会被终止!
@Value(value = "${diy.name}")
private String name;
@Value(value = "${diy.age}")
private Integer age;
@GetMapping(value = "/get")
@ResponseBody
public String getInfo() {
return name " : " age;
}
}
项目写完了,我们去我们的Nacos去写一下配置文件的内容
代码语言:javascript复制diy.name=张三
diy.age=18
写完之后,我们就可以正常的访问我们的接口,看看是否能够获取真实的文件内容。
整合Demo2:SpringCloud 整合配置中心 注册服务
代码语言:javascript复制# Nacos服务注册配置 需要去启动类加上 @EnableDiscoveryClient注解即可!
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=9449b8dc-6aed-4fc8-b551-1e0d812caba4
spring.cloud.nacos.discovery.group=xunliao
启动项目 去 服务管理 – 服务列表 – 你自己的命名空间 就可看到注册中心已经显示刚才启动并注册的服务了。
服务已经注册成功了!
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!