一、关于配置文件
1.配置文件的加载顺序
由图可知,优先级从高到底依次是: file://config,file://,classpath://config,classpath://
file://代表的是项目的根目录下,classpath在springboot项目就是resources目录。
2. properties和YAML两种格式的配置文件
SpringBoot默认支持properties和YAML两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。SpringBoot支持自动加载约定名称的配置文件,例如application.yml。如果是自定义名称的配置文件,就要另找方法了。可惜的是,不像前者有@PropertySource这样方便的加载方式,后者的加载必须借助编码逻辑来实现。
bootstrap.yml(bootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等。
application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
bootstrap.yml 先于 application.yml 加载。
二、关于Nacos
1.简介
Nacos是一个开源的动态服务发现、配置和服务管理平台,由阿里巴巴开发和维护。
Nacos支持多种注册中心和配置管理器,包括Spring Cloud Discovery、Dubbo、Kubernetes和Apache ServiceComb等。
Nacos提供了REST、gRPC和Java SDK等多种API,使得开发人员可以轻松地与Nacos进行交互。
2.核心特性
- 配置管理:Nacos提供了统一的配置管理平台,可以帮助用户集中管理不同环境的配置信息。用户可以通过Nacos的控制台或API进行配置的新增、修改、删除等操作,并且支持配置的版本管理。
- 服务发现和注册:Nacos提供了服务注册和发现的功能,可以帮助用户快速发现和访问服务。服务提供者在启动时将服务的元数据注册到Nacos,服务消费者通过Nacos获取服务提供者的地址信息,并进行调用。
- 动态配置:Nacos支持动态配置,可以在不停机的情况下动态修改配置信息。例如,可以通过Nacos修改数据库连接池的最大连接数,而不需要重启应用。
- 健康检查:Nacos提供了健康检查的功能,可以检测服务的可用性。当服务不可用时,Nacos会自动将该服务从服务列表中剔除。
- 路由策略:Nacos支持多种路由策略,可以根据不同的规则将请求路由到不同的服务提供者。
3.结构示意图
三、Nacos安装
1.下载安装包
从Nacos官网(https://nacos.io/download/nacos-server/)下载压缩包,解压缩。
解压下载的安装包,进入解压后的目录。
2.运行效果
进入bin目录,点击startup.cmd
效果如下:
3.关于Nacos闪退处理
- 以记事本方式打开startup.cmd,将set MODE=" "改为set MODE="standalone",即单例模式下。
- 有可能是没有配置环境变量JAVA_HOME,或者jdk版本过低。
四、代码实现
1.导入项目依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2023.0.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>4.0.3</version>
</dependency>
2.创建引导配置文件bootstrap.properties
#nacos控制台地址
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.application.name=S99-User
3.创建一个javabean类用于给属性赋值
@Component
@ConfigurationProperties(prefix = "uservo")
public class UserVO
{
@Value("${uservo.name}")
private String name;
@Value("${uservo.id}")
private long id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
4.写一个RequestMapping用于返回检验结果
@RequestMapping("/config")
public UserVO returnUser()
{
return user;
}
5.在Nacos控制台给服务配置端口号,以及注入属性的值
6.启动服务以及访问数据接口
由图可知,配置的19111端口号生效
数据接口也拿到了相对的值
6.优先级比较
我们来比较application.properties和配置中心的优先级,首先在配置中心发布一个配置,
然后在项目中新建一个配置
uservo.name=www
uservo.id=4399
访问数据接口,拿到的是以配置中心为准的结果
由此可见,配置中心的优先级高于服务中的配置