SpringBoot学习笔记之配置文件

本文详细介绍了SpringBoot的配置文件使用,包括application.properties和application.yml的差异,YAML的基本语法,配置文件值的注入方式如@ConfigurationProperties和@Value,以及数据校验和Profile的激活。还讨论了配置文件的加载位置、优先级和外部配置的加载顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

  • application.properties
  • application.yml
    配置文件的作用:修改SpringBoot自动配置的默认值;
    YAML:标记语言
    以数据为中心,比json、xml更适合做配置文件;
    示例:
    	 server: 
    	   port:8081
    
2. YMAL语法
2.1 基本语法

k:(空格)v :键值对,v前面必须有空格。
以空格来控制层级关系,只要是左对齐的数据,表示同一级别。
大小写敏感

	server:
	  port: 8080
	  path: /hello
2.2 值的写法

字面量:普通的值(数字,字符串,布尔):
k: v : 字面量直接写;
字符串默认不用加单引号或双引号;
当家双引号"“时:不会转义特殊字符,比如”/n",会换行
但是,单引号’‘会转义字符,’/n’,显示的就是 /n
对象、map(属性和值)(键值对):
k: v :在下一行来写对象的属性和值的关系;注意缩进,对象也是k: v的形式

	user :
		name : 张三
		age : 22

行内写法

	user: {name: 张三,age: 22}

数组(List、Set):
用 -值 表示数组中的一个元素

	users: 
		- jack
		- tom
		- lucy

行内写法:

	users: [jack,tom,lucy]
2.3 配置文件值注入

2.3.1 yaml配置文件的注入
配置文件

person:
    name: 张晓
    age: 22
    date: 2019/11/20
    list:
        - java
        - c
        - c#
    dog:
        dogName: 柯基
        dogAge: 2

将配置文件与对应的类绑定


//@ConfigurationProperties 注解将配置文件中的person与该类绑定,默认从全局变量获取值
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;

    private int age;

    private Date date;

    private List<Object> list;

    private Dog dog;

可以导入配置文件处理器,之后编写配置文件就会有自动提示

        <!-- 配置文件处理器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

2.3.2 propertites文件
需要注意IEDA默认是utf-8编码,需要在setting→file encoding中选中自动转换编码,否则会出现中文乱码

还有另一个配置文件注入方式 @Value()

public class Person {

    @Value("${person.name}")
    private String name;

    @Value("${person.age}")
    private int age;

2.3.3 两种注入方式比较@Value 和 @ConfigurationProperties

@ConfigurationProperties@Value
功能可以批量注入配置文件中的值只能单个值指定
松散绑定(即_可以转换,驼峰写法)支持不支持
EL表达式不支持支持
JSR303数据校验支持不支持
复杂类型数据(map,list等)支持不支持

选择:
①.当只是在某个业务逻辑中需要获取配置文件中的某个值,使用@Value;
②.当有一个JavaBean类需要和配置文件进行映射时,使用@ConfigurationProperties

2.3.4 配置文件数据校验(JSR303)

@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

 	//此处name的值就必须是一个邮箱格式
   @Email
   private String name;

2.3.5 @PropertySource & @ImportResource
@PropertySource:加载指定的配置文件

//@ConfigurationProperties 注解将配置文件中的person与该类绑定
//@PropertySource()   从指定的配置文件中获取值
@PropertySource(value = "classpath:person.properties")
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

  //@Value("${person.name}")
  private String name;

@ImportResource:在主配置类上使用,导入spring的配置文件,让配置文件里的内容生效

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

 <bean id="helloService" class="com.wn.springboot01.service.HelloService"/>
</beans>
//beans.xml 是编写的spring配置文件,这样加载进来就可以生效
@ImportResource(locations = "classpath:beans.xml")
@SpringBootApplication
public class SpringBoot01Application {

 public static void main(String[] args) {
     SpringApplication.run(SpringBoot01Application.class, args);
 }

}

SpringBoot不推荐上面的用法,而是使用配置类,全注解开发
配置类:spring配置文件

/**
 * @Configuration:指明当前类是一个配置类,替代之前的spring配置文件
 */
@Configuration
public class MySpringBootConfig {

    /**
     *  @Bean:相当于标签<bean></bean>,
     *  将方法返回值添加到容器,方法名就是容器中组件的默认id
     *
     */
    @Bean
    public HelloService helloService(){
        return new HelloService();
    }
}
3.配置文件可以使用占位符${}
4.Profile
4.1 多profile文件
	主配置文件可以多个,application-dev.properties/yml、application-pro.properties/yml...
	默认使用application.properties配置文件。

4.2 yml支持多文档块方式

#根据---来划分文档块
server:
  port: 8080
spring:
  profiles:
    active: dev
---
server:
  port: 8081
profiles: dev
---
server:
  port: 8082
profiles: pro

4.3 profile激活方式
4.3.1 在配置文件中可以通过spring.profiles.active = dev/pro来指定激活哪一个配置文件
4.3.2 命令行: --spring.profiles.active=dev
在这里插入图片描述
4.3.3 虚拟机参数:-Dspring.profiles.avtive=dev
在这里插入图片描述

5.配合文件加载位置

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

  • file:./config/ 项目根目录下config文件夹中配置文件
  • file:./ 项目根目录下的配置文件
  • classpath:/config/ resource目录下config文件夹中的配置文件
  • classpath:/ resource目录下配置文件
    以上位置优先级由高到低,且高优先级的配置会覆盖低优先级;
    springboot从以上4个位置加载配置文件,互补配置,相同的配置根据优先级高低来覆盖。
    还可以通过spring.config.location来改变默认的配置文件位置:
    项目打包好之后,可以使用命令行参数的形式,在启动项目的时候来指定配置文件位置;指定位置的配置文件和默认位置的配置文件共同起作用形成互补配置:
    java -jar 包名.jar --spring.config.location=路径
7.外部配置加载顺序

springboot可以从以下位置加载配置;优先级由高到低,高优先级配置覆盖低优先级,所有配置文件都会加载,形成互补

  • 1.命令行参数
  • 2.来自java:comp/env的JNDI属性
  • 3.Java系统属性(system.getProperties())
  • 4.操作系统环境变量
  • 5.RandomValuePropertySource配置的random.*属性值
  • 6.jar包外部的application-{profile}.properties/yml(带spring.profile)配置文件
  • 7.jar包内部的application-{profile}.properties/yml(带spring.profile)配置文件
  • 8.jar包外部的application-{profile}.properties/yml(不带spring.profile)配置文件
  • 9.jar包内部的application-{profile}.properties/yml(不带spring.profile)配置文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值