Spring Boot 框架中的配置文件

本文介绍了SpringBoot项目中配置文件的重要性和作用,包括数据库连接信息、端口设置等关键数据。配置文件主要有.properties和.yml两种格式,其中.yml提供更清晰的格式,但.properties具有更高的优先级。文章还讨论了如何读取配置、插件支持以及两种格式的优缺点,建议在项目中选择统一的配置文件格式。
摘要由CSDN通过智能技术生成

一、配置文件作用

整个项目中所有重要的数据都是在配置文件中配置的,比如:
  • 数据库的连接信息(包含用户名和密码的设置);
  • 项目的启动端口;
  • 第三方系统的调用秘钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等。
想象一下如果没有配置信息,那么 Spring Boot 项目就 不能连接和操作数据库 ,甚至是 不能保存可以用 于排查问题的关键日志 ,所以配置文件的作用是非常重要的。

二、配置文件的格式

Spring Boot 配置文件主要分为以下两种格式:
  • .properties
  • .yml

如下图所示:

这就好像连锁店里面的统一服装一样,有两种不同的款式, properties 类型的配置文件就属于老款 服饰” ,也是创建 Spring Boot 项目时默认的文件格式(主要是由于仓库里还有库存 ) ,而 yml 属于新版款式,如果用户了解情况直接指定要新款服饰,那么就直接发给他。

特殊说明

1. 理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties yml 一起存在一个项目中时,如果配置文件中出现了同样的配置,比如 properties yml 中都配置了 “server.port”
那么这个时候会以 properties 中的配置为主,也就是 ** .properties 配置文件的优先级最高,但加
载完 .properties 文件之后,也会加载 .yml 文件的配置信息 **
2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看。

为配置文件安装提示插件

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

 

3.properties 配置文件说明

properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。

3.1 properties 基本语法

properties 是以键值的形式配置的, key value 之间是以 “=” 连接的,如:
# 配置项目端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
PS :小技巧:配置文件中使用 “#” 来添加注释信息。

3.2 读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用 “${}” 的格式读取,如下代码所示:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,port:" + port);
    }
}
最终执行效果:
@Component Spring Boot 启动时候会注入到框架中,注入到框架中时会执行
@PostConstruct 初始化方法,这个时候就能读取到配置信息了。

3.3 properties 缺点分析

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

从上述配置key看出,properties 配置文件中会有很多的冗余的信息,比如这些

 想要解决这个问题,就可以使用 yml 配置文件的格式化了。

4.yml 配置文件说明

yml YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是 另一种标记语言 。yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
yml 最大的优势是可以跨语言 ,不止是 Java 中可以使用 golang python 都可以使用 yaml 作为配置文件。

4.1 yml 基本语法

yml 是树形结构的配置文件, 它的基础语法是 “key: value” ,注意 key value 之间使用英文冒号加空 格的方式组成的,其中的空格不可省略
基础语法如下:

 

其中第一项的配置为正确的, key 也是高亮显示的,而第二项没有空格是错误的使用方式,第二项的key 也没有高亮显示。

使用 yml 连接数据库

yml 使用示例:
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: root
yml properties 连接数据库的配置对比

 

4.2 yml 的高级使用使用

4.2.1 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: ~
4.2.1.1 yml 配置读取
yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${string.hello}")
private String hello;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,Hello:" + hello);
    }
}

 

4.2.1.2 注意事项:value 值加单双引号
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
我们在 application.yml 中配置如下信息:
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
读取程序实现代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@PostConstruct
public void postConstruct() {
System.out.println("string.str1:" + str1);
System.out.println("string.str2:" + str2);
System.out.println("string.str3:" + str3);
    }
}
以上程序的执行结果如下图所示:

 

从上述结果可以看出:
  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
  • 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。

4.2.2 配置对象

我们还可以在 yml 中配置对象,如下配置:
student:
id: 1
name: Java
age: 18
或者是使用行内写法(与上面的写法作用一致):
student: {id: 1,name: Java,age: 18}
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另一个注解 @ConfigurationProperties
来读取,具体实现如下:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "StudentComponent{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
    }
}
注意:以上代码中的 getter setter 方法不能省略。
调用类的实现如下:
@Component
public class ReadYml2 {
@Autowired
private StudentComponent studentComponent;
@PostConstruct
public void postConstruct() {
System.out.println(studentComponent);
    }
}
以上程序的执行结果如下图所示:

4.2.3 配置集合

配置文件也可以配置 list 集合,如下所示:
dbtypes:
name:
- mysql
- sqlserver
- db2
或者是使用行内写法(与上面的写法作用一致):
dbtypes: {name: [mysql,sqlserver,db2]}
集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}
打印类的实现如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void postConstruct() {
System.out.println(listConfig.getName());
    }
}

5.properties VS yml 总结

  • properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略。
  • properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
  • yml 通用性更好,支持更多语言,如 JavaGoPython 等,如果是云服务器开发,可以使用一份配置文件作为 Java Go 的共同配置文件。
  • yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值