【JavaEE】Spring Boot配置文件

发布于:2025-03-13 ⋅ 阅读:(32) ⋅ 点赞:(0)


一、Spring Boot配置文件简介

配置⽂件主要是为了解决硬编码(代码写死)带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏.

SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

  • 项⽬的启动端
  • 数据库的连接信息(包含⽤⼾名和密码的设置)
  • 第三⽅系统的调⽤密钥等信息
  • ⽤于发现和定位问题的普通⽇志和异常⽇志等.

Spring Boot 配置文件格式:

  • application.properties
  • application.yml
  • application.yaml

说明:

  • yml格式是yaml的简写模式。
  • properties和yml配置格式可以共存,两个配置取并集,当有冲突(对同一个配置都操作了),以properties为准(properties优先级更高)
  • SpringBoot配置文件的文件名默认必须是application,其它名需要自己设置,否则就算有后缀也不会当成是配置文件。

二、properties 配置⽂件说明

2.1 properties 基本语法

基本语法如下:

  • properties 是以键值的形式配置的,key 和 value 之间是以"="连接的;
  • key的每个单词之间建议使用 点 . 分隔开。

2.2 @value(“${}”)读取配置⽂件

主动的读取配置⽂件中的内容,可以使⽤@Value 注解来实现。@Value 注解使⽤" ${} "的格式读取,在大括号中写配置的key。

package com.example.springioc.controller;

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;

@Controller
public class USController {
    @Value("${my.key}")
    private String myKey;

    @PostConstruct
    public void init() {
        System.out.println("my.key = "+myKey);
    }

}

注意事项:

  • 配置中设置key-value的时候,指不用考虑类型,在我们代码中拿到值的时候会转换成变量的类型。
  • 当然有些类型是不会转换成功的,例如当你在配置文件中写了一个字符串,使用int类型来接收就会出错。
  • 由于我们每个配置的可以都要写完全,就会导致properties 配置⽂件中会有很多的冗余的信息。my.key1=1 my.key2=1如上两个配置的my在properties格式下就不能合并。

三、yml 配置文件说明

3.1 yml 基本格式

基本格式如下:

  • 一级,key: valuekey之后的冒号与冒号之后的一个空格都不能省略;
  • 多级,key的每个单词占一行,并且在单词后面加冒号,且不能出现级数的单词相同不放在一起
  • 在同一个级别下面的单词要对准(建议与上一级隔两个空格),不对齐会将同级认为父子级

3.2 yml 配置数据类型 及 读取

对于数据类型只有两个需要特别注意,其它都是直接写

  • 一个波浪号代表nullnull: ~
  • 空字符串,不写或者使用空单引号empty: ''

对于配置的读取与上面的properties配置读取方法一样使用@value(“${}”),对于不同级别的单词使用点连接。例如上面的配置读取

@value("${spring.datasource.url}")

3.3 yml配置对象及读取@ConfigurationProperties(prefix = “”)

对于类对象的配置,直接用一个两级写法即可,外面单词就是类名,里面的单词就是属性。

person:
  name: zhangsan
  age: 18
  id: 111

对于配置的读取,我们使用注解@ConfigurationProperties(prefix = “”) 引号中写类名。

@Data
@ConfigurationProperties(prefix = "person")
@Configuration

public class Person {
    private String name;
    private String id;
    private Integer age;

    private Integer age44;

}

注意事项:

  • 注解去配置文件中拿属性的时候是根据属性名字对应的
  • 注解只会管类中的属性是否跟配置文件有对应,有就赋值,没有不会报错。

3.4 配置集合 及读取

只需要在上面的语法中,给key赋值value时每个value值用短斜杠加空格即可。例如下面的name就是一个集合。

person:
  name:
    - zhangsan
    - lisi
  age: 18
  id: 111

对于配置的读取,我们使用注解@ConfigurationProperties(prefix = “”) 引号中写类名,然后属性名对应即可。

package com.example.springioc.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Data
@ConfigurationProperties(prefix = "person")
@Configuration("person")

public class Person {
    private List<String> name;
    private String id;
    private Integer age;

    private Integer age44;

}

配置Map及读取

配置Map就跟基础语法中配置多级时的一样。

person:
  name:
    - zhangsan
    - lisi
  age: 18
  id:
    id1: 111
    id2: 222
    id3: 333

对于配置的读取,我们使用注解@ConfigurationProperties(prefix = “”) 引号中写类名,然后属性名对应即可。

package com.example.springioc.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;

@Data
@ConfigurationProperties(prefix = "person")
@Configuration("person")

public class Person {
    private List<String> name;
    private Map<String,String> id;
    private Integer age;

    private Integer age44;

}