什么是 Nacos
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施
Nacos 文档
一、安装搭建
1、下载nacos2.0.4版本。(官方下载地址:Release 2.0.4 (Jan 18, 2022) · alibaba/nacos · GitHub)
2、编辑配置文件nacos/conf/application.properties将端口修改为7001,默认端口为8848,也可以不改。
3、nacos 默认使用的是内置 MySQL,也可以使用独立 MySQL 数据库,如果使用独立数据库,执行nacos提供的脚本/nacos/conf/nacos-mysql.sql。
4、如果是使用独立数据库,则再修改配置文件/nacos/conf/application.properties,将数据源信息修改为自己的数据库地址。将下面参数修改为自己数据库参数。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=12345678
5、在nacos的bin目录执行startup.cmd -m standalone,切记要加-m standalone,意思为以单机版模式启动,否则会报“Unable to start web server,Unable to start embedded Tomcat”。这是因为我们本地学习一般都是单机,只有一个nacos,所以只能以单机模式启动。
6、访问http://localhost:7001/nacos/,默认用户名密码:nacos/nacos
因为配置文件中server.servlet.contextPath=/nacos加了nacos,所以访问地址也需要加上nacos。

二、Java SDK拉取配置及监听配置
该拉取方式类型我们刚开始学写代码的时候写的helloWord,下面通过demo进行获取nacos配置文件的参数。
1、在左边列表配置管理的配置列表,点击右上角+

2、填写dataId和group并选择想要的配置文件格式后,输入自己想要配置的内容,如下:

3、填写完成后,点击右下角发布按钮即可。

4、新建springboot项目并引进下面的配置
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.0.4</version>
</dependency>
4.1、新建测试类,进行拉取配置测试
public static void main(String[] args) {
// 拉取nacos配置信息
try {
String serverAddr = "http://localhost:7001";
String dateId = "test1";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
System.out.println("************************** 打印配置文件的参数 ****************************");
String content = configService.getConfig(dateId, group, 5000);
System.out.println(content);
} catch (NacosException e) {
e.printStackTrace();
}
}

4.2、监听配置测试
public static void main(String[] args) {
// 拉取nacos配置信息
try {
String serverAddr = "http://localhost:7001";
String dateId = "test1";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
System.out.println("************************** 监听配置文件参数改变 ****************************");
configService.addListener(dateId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String s) {
System.out.println(s);
}
});
// 设置输入,防止main方法结束,测试修改配置后是否可以监听得到。
System.in.read();
} catch (NacosException | IOException e) {
e.printStackTrace();
}
}
运行后去nacos配置那里进行编辑(将7001改为7002)后重新发布,控制台就能看到改变后打印的数据。

三、Spring拉取配置
main方法,通过AnnotationConfigApplicationContext获取nacos配置,调用服务类通过@Value注解拿到值并且打印到控制台
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(NacosConfig.class);
TestService testService = applicationContext.getBean(TestService.class);
testService.test();
}
@Component
public class TestService {
@Value("${nacos.config.server-addr}")
private String serverAddr;
public void test() {
System.out.println("serverAddr:" + serverAddr);
}
}
@ComponentScan("com.example.nacosstudy.spring")
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:7001"))
@NacosPropertySource(dataId = "test1", autoRefreshed = true)
public class NacosConfig {
}
通过nacos注解@EnableNacosConfig指定地址和@NacosPropertySource指定dataId,进而获取到nacos上的配置信息。

四、Springboot拉取配置及自动刷新
1、引入下面配置并注释掉spring中的nacos-spring-context配置。
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>
2、在 application.properties 中配置 Nacos server 的地址。
nacos.config.server-addr=127.0.0.1:7001
3、使用 @NacosPropertySource 加载 dataId 为 test1 的配置源,并开启自动更新。
@SpringBootApplication
@NacosPropertySource(dataId = "test1", autoRefreshed = true)
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
}
4、通过 Nacos 的 @NacosValue 注解设置属性值。
@Controller
@RequestMapping("config")
public class ConfigController {
// 不自动刷新
// @Value("${nacos.config.server-addr}")
// 自动刷新
@NacosValue(value = "${nacos.version.no}", autoRefreshed = true)
private String versionNo;
@GetMapping("/test")
@ResponseBody
public String test() {
return versionNo;
}
}
5、启动项目,在浏览器访问,修改nacos配置后,刷新浏览器,结果如下:


注意:
1、自动刷新要用@NacosValue注解,并且开启autoRefreshed = true,默认为false。
2、如果不使用@NacosPropertySource 加载 dataId并且达到自动刷新,可以在application.properties 中配置
nacos.config.data-id=test1
nacos.config.auto-refresh=true
#这个配置要改为true,否则启动会报错
nacos.config.bootstrap.enable=true
五、SpringbootCloud拉取配置及刷新
新建springbootCloud项目,注意版本号需对应,否则项目将有问题。版本说明 Wiki,引入以下包
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
springbootCloud项目启动时会读取boostrap.properties文件,所以要有该文件。在该文件上配置下面代码
spring.cloud.nacos.config.server-addr=127.0.0.1:7001 spring.application.name=test1
新建读取测试配置类
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${nacos.version.no}")
private String versionNo;
@RequestMapping("/get")
public String get() {
return versionNo;
}
}
自动刷新核心注解为@RefreshScope,在需要使用配置的地方使用该注解,如果不想每个地方都使用该注解,只能定义公共参数方法,然后在需要用参数的地方调用即可。
新建公共配置类
@Data
@RefreshScope
@Component
public class CommonConfig {
@Value("${nacos.version.no}")
private String versionNo;
}
测试调用
@RestController
@RequestMapping("/config")
public class ConfigController {
@Autowired
private CommonConfig commonConfig;
@RequestMapping("/get")
public String get() {
return commonConfig.getVersionNo();
}
}
六、按profile拉取配置
优先级
user.properties>test.properties>test
properties类型可以通过配置进行配置,如果是用yaml,就可以在boostrap.properties配置成yaml
未完待续。。。。。。

3586

被折叠的 条评论
为什么被折叠?



