1.下载Nacos
下载完解压,进入nacos到bin目录下
输入cmd 运行单机启动命令 startup.cmd -m standalone
之后出现
浏览器输入网站 访问 http://localhost:8848/nacos
在服务列表 -> 配置列表 点击创建配置 (一共需要创建两个文件)
创建第一个文件:
dataId为 youxin-server-dev.yaml
配置格式为 yaml
配置内容编写你的配置内容(要读取的配置信息)
创建第二个文件:
dataId为 youxin-server-test.yaml
配置格式为 yaml
最后这里有两个配置 如图:
到此nacos下载完成,配置文件也配置好了,接下来就是读取nacos中的配置信息了
2.查看springboot版本,如果不是3.2.2那先设置成和我一样的版本,可以直接手动改成3.2.2,改完刷新maven,我使用的maven版本为3.9.6,JDK 17
3.引入依赖
<!-- nacos-->
<!-- 服务发现依赖-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!-- <version>2023.0.3.2</version>-->
<!-- </dependency>-->
<!-- 实现从Nacos读取配置的功能-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2023.0.3.2</version>
</dependency>
<!-- Spring Cloud Context for @RefreshScope 这个注解,当nacos配置文件更新时,读取到的数据也随之更新-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<version>4.1.1</version>
</dependency>
<!-- 使用bootstrap配置文件时使用这个依赖-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-bootstrap</artifactId>-->
<!-- <version>4.1.1</version>-->
<!-- </dependency>-->
方式一:在application.yaml文件中编写配置(在这里演示这一种)
方式二:在新建bootstrap.yaml,在bootstrap文件中编写配置 (这种方式也有效)
4.编写配置文件application.yaml,如果你的事.properties的扩展名,自己转化一下;如果使用的是bootstrap.yaml配置文件,你就在bootstrap文件中编写如下配置
server:
port: 8080
spring:
profiles:
active: test
application:
name: youxin-server
config:
import: "nacos:${spring.application.name}-${spring.profiles.active}.yaml"
cloud:
nacos:
config:
server-addr: localhost:8848 # Nacos服务器地址
5.编写控制器读取nacos配置文件信息
@RestController
@RefreshScope
public class TestNacos {
// @Value("${test.message:Default Message}")
@Value("${test.message}")
private String message;
@Value("${my.aa}")
private String aa;
@GetMapping("/test")
@PermitAll
public String test() {
return message + "==>" + aa;
}
}
启动项目,打开浏览器访问 /test接口
已经成功读取到了nacos中的配置文件
修改配置文件 youxin-server-dev.yaml
再次访问test接口 配置信息已经更新了
接下来将application.yaml中的 将test 修改成dev,并重启项目
profiles: active: dev
重启成功后再次访问test接口
说明:
import: "nacos:${spring.application.name}-${spring.profiles.active}.yaml"
这行配置是从nacos中导入配置,格式为nacos:dataId 我这里是使用${}来动态生成导入的文件名,这样就可以根据环境动态读取哪个配置文件,而不是写死;
server-addr: localhost:8848 # Nacos服务器地址
这里nacos的地址可以写的 dev或test等配置中,application.yaml等配置文件中就可以不用写,或者也可以application.yaml等配置文件中动态读取值。
综上所述:配置文件从nacos中动态读取,当你项目在生产环境,需要修改配置文件,从而又要进行重新打包,现在将配置文件从nacos中读取,下次就可以直接修改了,降低了耦合度。
@RefreshScope 注解作用是当nacos配置文件更新时,程序读取到的配置也会随之更新,如何没有加上这个注解,那读取的还是之前的配置数据
springboot的单体项目,没有bootstrap的配置文件,因此需要引入一个依赖才可以编写bootstrap.yaml文件