SpringBoot中的两种配置文件

tech2025-08-24  5

SpringBoot中的配置文件

一、application.properties二、application.yml1、yaml基础语法2、yaml支持的三种数据结构: 三、配置文件值注入(1)@Value(2)@ConfigurationProperties将属性注入到实体类中(3)@Value和@ConfigurationProperties的区别:(4)@PropertySource(5)@ImportResource 四、配置文件占位符五、Profile(1)多profile文件形式:(2)yml的文档块模式(3)命令行的方式(4)虚拟机参数配置 六、配置文件加载位置

SpringBoot全局配置文件有两种写法且配置文件名称是固定的,配置文件主要用来修改SpringBoot自动配置的默认值。配置文件在src/main/resources目录或者类路径/config下

一、application.properties

语法结构 :key=value

server.port=8080

二、application.yml

语法结构 :

key: value

yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中 心,比json、xml等更适合做配置文件。以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yml和xml;

传统xml配置:

<server> <port>8081<port> </server>

yaml配置:(更加简洁,更能凸显出数据)

server: prot: 8080

1、yaml基础语法

以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

属性和值的大小写十分敏感。

缩进时不允许使用Tab键,只允许使用空格,缩进的空格数目不重要。

冒号后面要跟空格来分开键值。

2、yaml支持的三种数据结构:

对象:键值对的集合数组:一组按次序排列的值字面量:单个的、不可再分的值

(1) 对象(或Map键值对)

#对象、Map格式 k: v1: v2:

对象的属性和值得关系,注意缩进;

student: name: lisi age: 3

写成一行:

student: {name: lisi,age: 3}

(2)数组(或 List、set )

用 - 值表示数组中的一个元素,比如:

pets: - cat - dog - pig

写成一行:

pets: [cat,dog,pig]

(3)字面量 数字、字符串、布尔、日期

字符串

默认不使用引号可以使用单引号或者双引号,单引号会转义特殊字符“ ” 双引号,不会转义字符串里面的特殊字符 ; 比如 :name: “kuang \n shen” 输出 :kuang 换行 shen'' 单引号,会转义特殊字符 比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen

(4)文档分隔 多个文档用- - - 隔开

三、配置文件值注入

application.yml:

person: name: lisi age: 3 happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺财 age: 1

配置文件值注入有两种方式@Value和@ConfigurationProperties。

(1)@Value

@Component public class Person { @Value("${person.name}") private String name; @Value("#{11*2}") private Integer age; @Value("true") private Boolean happy; }

(2)@ConfigurationProperties将属性注入到实体类中

@Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }

@ConfigurationProperties:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定参数prefix = “person” : 将配置文件中的person下面的所有属性一一对应.

需要导入:

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>

(3)@Value和@ConfigurationProperties的区别:

@ConfigurationProperties@Value功能批量注入配置文件种的属性一个个注入松散绑定支持不支持SpEL不支持支持JSR303校验支持不支持复杂类型封装支持不支持

1)松散绑定: 如果配置文件中person的一个属性为firstName,那么松散绑定也就意味着在使用@ConfigurationProperties注入属性时,以下方式都是等价的:

person.firstName: person.first-name: person.first_name: PERSON_FIRST_NAME:

2)SpEL: @Value支持spring的表达式语言:

@Value("#{11*2}") private Integer age;

3)JSR303校验 使用@ConfigurationProperties时支持JSR303数据校验,使用@Validated注解

@Component @Validated @ConfigurationProperties(prefix = "person") public class Person { @Email //name必须是邮箱格式 private String name; }

4)复杂类型封装

@Component public class Person { @Value("${person.maps}") private Map<String,Object> maps; }

对于上面这样,使用@Value注入复杂类型的值,就会报错。

注意:

如果我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接使用@configurationProperties如果只是在应用中需要使用配置文件中的某项值,就直接使用@Value就好了。

(4)@PropertySource

可以使用@PropertySource ,加载指定的配置文件,只能用于properties文件; @PropertySource(value = "classpath:person.properties") @configurationProperties:默认从全局配置文件中获取值; @ConfigurationProperties(prefix = "person")

(5)@ImportResource

导入Spring配置文件,并让内容生效。

@SpringBootApplication @ImportResource(locations={"classpath:beans.xml"}) public class HellospringbootApplication { public static void main(String[] args) { SpringApplication.run(HellospringbootApplication.class, args); } }

四、配置文件占位符

配置文件还可以编写占位符${} 生成随机数,

person: name: lisi${random.uuid} # 随机uuid age: ${random.int} # 随机int happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} hello: hello lists: - code - girl - music dog: name: ${person.hello:other}_旺财 age: 1

name: ${person.hello:other}_旺财:如果person.hello存在则输出:hello对应的值,若不存在则输出othor。这里冒号指定的就是默认值。

五、Profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数来快速切换环境。

(1)多profile文件形式:

格式:application-{profile}.properties/yml:

例如:

application-dev.properties //开发环境application-test.properties //测试环境application-prod.properties //生产环境

默认使用application.properties中的配置,如果要激活某个环境就需要在默认配置文件application-{profile}.properties/yml 中配置spring.profiles.active=dev

(2)yml的文档块模式

server: port: 8081 spring: profiles: active: dev --- server: port: 8082 spring: profiles: dev --- server: port: 8083 spring: profiles: prod

(3)命令行的方式

1)在启动时,指定配置文件。

2)-jar的方式运行时指定配置文件

java -jar springBoot.jar --spring.profiles.active=prod

(4)虚拟机参数配置

六、配置文件加载位置

1、配置文件的默认加载位置

SpringBoot启动会扫描以下位置的application.properties或者 application.yml文件作为Spring boot的默认配置文件。

file:./config/file:./classpath:/config/classpath:/

以上是按照优先级从高到低的顺序,高优先级配置内容会覆盖低优先级配置内容,且各配置文件的内容也会互补(会加载上面位置中所有的配置文件)。 注意:

1、2属于工程包下的配置文件,打jar包时并不会将它们打包进来,jar包文件中只会包含类路径下的配置文件3、4.

2、外部配置文件的加载

(1)项目打包好之后,我们也可以通过命令行参数的方式使用spring.config.location来改变默认配置。

java -jar springboot.jar --spring.config.location=C:/application.properties

(2)命令行参数:多个参数时,中间可以用空格分开。

java -jar springboot.jar --server.port=8095

(3)也可以在jar包外部写配置文件:

jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包外部的application.properties或application.yml(不带spring.profile)配置文件jar包内部的application.properties或application.yml(不带spring.profile)配置文件
最新回复(0)