欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 配置文件值注入

程序员文章站 2022-03-02 19:00:31
...

首先在配置文件中配置好相关属性,配置时要注意语法格式。

person:
  name: zhangsan      #String 类型       
  age: 20             #Integer 类型
  birth: 2000/01/01   #Date 类型       
  boss: true   	      #Boolean 类型
  maps: { A1: 1,A2: 2,A3: 3}  #Map
  lists: [A1,A2,A3]	      #List
  dog:   		      #对象
    name: dog
    age: 2
    birth: 2018/01/01

这里声明一个Dog类用于测试对象属性的绑定和值的注入

@Data
public class Dog {

    private String name;
    private Integer age;
    private Date birth;

}

1、使用@ConfigurationProperties 注解注入值:在类上添加 @ConfigurationProperties 注解可以告诉Spring Boot将本类中所有属性和配置文件中相关配置进行绑定,使用prefix = “” 指定和配置文件中哪个下面的所有属性进行 一 一 映射,默认应用于全局配置文件。可以使用@PropertySource 注解加载指定配置文件,但是如果全局配置文件中也有相关属性,全局配置文件优先。@ConfigurationProperties 注解支持松散语法绑定,支持js303数据校验,但不支持Spring表达式。只有该组件在容器中才能使用。

@Component

//将本类中所有属性和全局配置文件中person下的所有属性进行绑定
@ConfigurationProperties(prefix = "person")

@Data

public class Person {

    private String name;

    private Integer age;

    private Date birth;

    private Boolean boss;

    private Map<String,Object> maps;

    private List<Object> lists;

    private Dog dog; 

}

使用@ConfigurationProperties 注解需要导入以下依赖

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

输出结果

Person(  
name = zhangsan, 
age = 20,
birth = Sat Jan 01 00:00:00 CST 2000, 
boss = true,
maps = {A1=1, A2=2, A3=3},
lists = [A1, A2, A3],
dog = Dog(  name=dog, 
            age=2, 
            birth=MonJan 01 00:00:00 CST 2018)
)

2、使用@Value注解注入值:@Value 注解通过配置文件获取相关属性配置,默认应用于全局配置文件。可以使用@PropertySource 注解加载指定配置文件,但是如果全局配置文件中也有相关属性,全局配置文件优先。也可以通过Spring表达式指定属性值或者直接指定属性值。@Value 注解不能使用于复杂类型封装,并且需要放在容器中才能使用,不支持松散语法绑定,不支持js303数据校验,支持Spring表达式。

@Component

@Data

public class Person {
 
    @Value("${person.name}") //从配置文件中获取相关属性配置进行绑定

    private String name;

    @Value("#{11*2}") //通过Spring表达式指定属性值

    private Integer age;

    @Value("2000/02/02") //直接指定属性值

    private Date birth;

    @Value("true") //直接指定属性值

    private Boolean boss;


    //复杂类型封装,不支持@Value,支持@ConfigurationProperties

    private Map<String,Object> maps;

    private List<Object> lists;

    private Dog dog;

}

输出结果

Person( 
name = zhangsan989dc200-05a1-4573-8a08-abd983eb4905, 
age = 22,
birth = Wed Feb 02 00:00:00 CST 2000, 
boss = true, 
maps = null, 
lists = null, 
dog = null
)