属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践

属性注入

当使用 Spring Boot 开发应用程序时,可以使用属性文件来配置应用程序的行为。Spring Boot 支持将属性值从属性文件注入到应用程序中的不同组件中。这使得我们可以在不修改代码的情况下更改应用程序的行为。

Spring Boot 支持多种类型的属性文件,包括 .properties.yml 文件。以下是使用这些文件进行属性注入的示例:

  1. 创建属性文件:首先,创建一个名为 application.properties(或 application.yml)的文件,放在 src/main/resources 目录下。该文件包含要配置的属性键值对。
  2. 定义属性:在属性文件中,可以定义应用程序需要的各种属性。例如,可以定义数据库连接的URL、用户名、密码等。
author:
  name: 薛伟
  age: 25
  isMan: true
  # 日期格式必须为 yyyy/MM/dd HH:mm:ss
  birthday: 1999/07/29 12:00:00
  # 数组或集合使用 , 分割
  friends: 张三,李四,王五,赵六
  # 此处为 JSON 字符串,双引号包裹
  school: "{'name':'宜春学院', 'location':'江西-宜春', 'major':'计算机科学与技术'}"

注入属性值:在 Spring Boot 应用程序的代码中,可以通过使用 @Value 注解将属性值注入到变量中。

@SpringBootTest
public class InjectionTest {

    /**
     * 注入基本数据类型
     */
    @Value("${author.name}")
    private String name;
    
    @Value("${author.age}")
    private Integer age;
    
    @Value("${author.isMan}")
    private Boolean isMan;

    /**
     * 注入日期
     */
    @Value("${author.birthday}")
    private Date birthday;

    /**
     * 注入数组或集合
     */
    @Value("${author.friends}")
    private List<String> friends;

    /**
     * 注入 JSON 转为 Map
     */
    @Value("#{${author.school}}")
    private Map<String,Object> school;
    
}

对象注入

使用 @ConfigurationProperties(prefix = "前缀"),比如上文在 application.yml 中配置的信息,那么 author 就是前缀。注意使用对象注册的时候就不可以在注入 JSON 了。

@Data
@Component
@ConfigurationProperties(prefix = "author")
public class Author {
    private String name;
    private Integer age;
    private Date birthday;
    private Boolean isMan;
    private List<String> friends;
}

自定义配置文件并使用对象注入

在 Spring Boot 应用程序中,可以使用自定义配置文件来覆盖默认的 application.properties 或 application.yml 文件。这意味着您可以在不修改默认配置文件的情况下,为您的应用程序提供自己的自定义配置。

resources 目录下创建 custom.properties 配置文件,并填写以下配置:

project.name=测试DEMO
project.jdk=1.8

加载自定义配置文件:在 Spring Boot 应用程序中,可以通过使用 PropertySource 注解加载自定义配置文件。

@Data
@Component
@PropertySource("classpath:/custom.properties")
public class MyProject {
    
    @Value("${project.name}")
    private String name;

    @Value("${project.jdk}")
    private String jdk;
}

然后配合 @ConfigurationProperties(prefix = "前缀") 即可完成对象注入。

@Data
@Component
@ConfigurationProperties(prefix = "project")
@PropertySource("classpath:/custom.properties")
public class Project {
    private String name;
    private String jdk;
}

你可能感兴趣的:(spring,boot)