SpringBoot配置文件(properties yml)
创始人
2024-05-27 05:07:09
0

查看官网更多系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

1.配置⽂件作⽤

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:数据库的连接信息(包含⽤户名和密码的设置);项⽬的启动端⼝;第三⽅系统的调⽤秘钥等信息;⽤于发现和定位问题的普通⽇志和异常⽇志等。

如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的。

2.配置文件的分类:

1、系统的配置文件,比如连接字符串、比如日志的相关设置,系统定义好的。

2、用户自定义的。

3.配置文件的格式:

Spring Boot 配置⽂件主要分为以下两种格式:

.properties

.yml

如下图所示:

其中properties 类型的配置⽂件就属于⽼款,也是创建 Spring Boot 项⽬时默认的⽂件格式,⽽ yml 属于新版款式。理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项⽬中时,如果配置⽂件中出现了同样的配置,⽐如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最⾼,但加载完.properties ⽂件之后,也会加载 .yml ⽂件的配置信息。 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。

4.为配置⽂件安装提示插件

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项⽬了,并且 yml 的配置⽂件就有提示了。但默认情况下是不⽀持 properties 格式的⽇志提示的,这个时候需要安装了 Spring Tools 插件才会有相应的提示。

5.properties 配置文件的基本语法

Key=Value格式,properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

6.关于properies 中文乱码的问题处理:

将原来的application. properies删除掉,重新再创建一个application. properies。因为之前的配置文件已经是不支持中文编码的文件格式化,设置编码再创建application.properies 之后,所以后设置的编码不会改变原来的旧的 application.properies文件,所以需要先将之前的配置文件删除掉重新创建。

7.读取单个的配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。@Value 注解使⽤“${}”的格式读取,如下代码所示:

@Component 
public class Read { @Value("${server.port}") private String port; @PostConstruct public void postConstruct() { System.out.println("port:" + port); } 
}

@Component 在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct 初始化⽅法,这个时候就能读取到配置信息了。

8.properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下所示:

Spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false;
Spring.datasource.name=root
Spring.datasource.password=1234

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息。想要解决这个问题,就可以使⽤yml 配置⽂件的格式化了。

9.yml 配置⽂件特点以及语法

特点:写法简单,可读性更高;支持更多的数据类型;可以跨语言使用,java/golang/python等等

语法:key: value;key和value之间用冒号+空格连接。

spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=falsename: rootPassword: 1234

10.yml可以配置不同数据类型及 null

# 字符串 
string.value: Hello 
# 布尔值,true或false 
boolean.value: true 
boolean.value1: false 
# 整数 
int.value: 10 
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制 
# 浮点数 
float.value: 3.14159 
float.value1: 314159e-5 # 科学计数法 
# Null,~代表null 
null.value: ~

11.yml单、双引号的问题:

yml 中如果使用了双引号就会按照(原〉语义执行,如果不加单、双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如n -> \\n(转义)处理。

12.yml配置读取

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可。

13.yml配置对象

以在 yml 中配置对象:

student: id: 1 name: Java age: 18# 或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
student: {id: 1,name: Java,age: 18} 

这个时候就不能⽤@Value 来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取,具体实现如下:

@ConfigurationProperties(prefix = "student") 
@Component 
@Data
public class StudentComponent { private int id; private String name; private int age; 
}

调⽤类的实现如下:

@Component 
public class ReadYml2 { @Autowired private StudentComponent studentComponent; @PostConstruct public void postConstruct() { System.out.println(studentComponent); } 
} 

14.yml配置集合

配置⽂件也可以配置 list 集合,如下所示:

dbtypes: 
name: - mysql - sqlserver - db2
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致): 
dbtypes: {name: [mysql,sqlserver,db2]} 

集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

@Component 
@ConfigurationProperties("dbtypes") 
@Data 
public class ListConfig { private List name; 
} 

调⽤类的实现如下:

@Component 
public class ReadYml2 { @Autowired private ListConfig listConfig; @PostConstruct public void postConstruct() { System.out.println(listConfig.getName());
}
}

查看更多系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

properties & yml 总结

properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂

冒号加空格的⽅式设置,并且空格不可省略。

● properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的

解决数据冗余的问题。

● yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份

配置⽂件作为 Java 和 Go 的共同配置⽂件。

● yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...