目录
一、添加Nacos配置
二、权限配置
三、读取nacos配置文件
四、动态刷新
五、Nacos配置中心的使用案例
1、添加Nacos配置中心依赖
2、新建bootstrap.yml配置文件
3、添加测试
一、添加Nacos配置
点击配置列表添加配置:
这纠正一下:一般环境会通过dev、prod、public环境来划分,group一般用作标记某个项目组,id一般用于标记某个服务的包名。
添加以后:
二、权限配置
设置权限配置前,需要先将nacos的application.properties配置文件里的nacos.core.auth.enabled设置为true,默认为false。
此时,springcloud里就一定要配置用户名和密码了。
三、读取nacos配置文件
如读取dataId为myconfig-dev.yaml的文件:
项目里添加bootstrap.yaml文件,文件名一定不能错:
spring:
application:
name: myconfig
profiles:
active: dev
cloud:
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
config:
# namespace: public
file-extension: yaml
加载类进行测试:
package com.wxl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext =SpringApplication.run(ConfigApplication.class,args);
String username=applicationContext.getEnvironment().getProperty("my.name");
System.out.println(username);
System.out.println("=================================================");
}
}
可以看到,配置文件已被读取:
四、动态刷新
也可以通过@Value来获取配置信息:
package com.wxl.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class ConfigService {
@Value("${my.name}")
private String name;
public String getName(){
return this.name;
}
}
修改配置:
刷新页面,可以看到页面的配置数据并没有刷新:
我们可以通过@RefreshScop注解来刷新
package com.wxl.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
@Service
@RefreshScope
public class ConfigService {
@Value("${my.name}")
private String name;
public String getName(){
return this.name;
}
}
访问后为Mary,再次更改配置文件:
访问的配置已热更新:
五、Nacos配置中心的使用案例
1、添加Nacos配置中心依赖
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、新建bootstrap.yml配置文件
添加配置如下用于读取nacos的配置信息
spring:
application:
# nacos会自动根据服务名拉取dataid的配置文件
name: config-nacos-service
cloud:
nacos:
server-addr: my-server:8848 # nacos的服务配置
username: nacos # 用户名
password: xxxx # 密码
discovery:
namespace: 60a478c2-668e-4dfa-a5e8-1efd74398aa2 # 测试环境dev
group: Service_group_01 # 分组名
config:
namespace: 60a478c2-668e-4dfa-a5e8-1efd74398aa2 # 测试环境dev
group: Service_group_01
file-extension: yaml
profiles:
active: dev
server:
port: 8001
注意这里设置namespace时设置的是dev的id而不是名字
若添加了active: dev 读取的配置文件应为:服务名-dev.yaml
这里用户名和密码不能少。Nacos会自动根据服务名拉取dataId的配置文件,如果dataId和服务名不一致,就需要手动指定了。
在nacos中添加对应nacos的配置文件
3、添加测试
测试类:通过@Value来获取配置文件信息,若想实现刷新,需要再添加上@RefreshScope注解。
package com.dragonwu.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author DragonWu
* @date 2022-09-30 16:28
**/
@RestController
@RequestMapping("/test")
@RefreshScope //开启实时刷新
public class TestController {
@Value("${person.name}")
String name;
@Value("${person.age}")
Integer age;
@GetMapping
public String test(){
return name+"的年龄是"+age+"岁";
}
}
@RefreshScope添加后,修改nacos上对应的配置文件也可以动态修改了。