将配置文件中的数据设置到类的属性上

阅读量: 118 编辑

将配置文件中的数据设置到类的属性上

一、通过 @Value 注解 和 Expression 表达式读取

读取的是application.yml中的配置

@Value("${com.qicong.name:QiDaCong}")
public String name;

二、自定义配置文件

2.1、在pom.xml文件中添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <!-- 依赖不需要传递,子模块需要重新引用 -->
    <optional>true</optional>
</dependency>

2.2、创建 resource.yml 文件

# 配置自己的一些属性

com.wesite:
  name: HelloSpringBoot
  url: springboot
  date: 2021

2.3、创建 ResourceConfig.java

@Configuration
@ConfigurationProperties(prefix = "com.wesite")
@PropertySource(value = "classpath:resource.yml", factory = YmlResourceFactory.class)
public class ResourceConfig {

    private String name;
    private String url;
    private String date;
    
    //setter & getter 方法略
    
}

2.4、创建YmlResourceFactory.java

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;

import java.io.IOException;
import java.util.Properties;

/**
 * User: 祁大聪
 * 固定写法,可以放到自己的util包中,供平时使用
 */
public class YmlResourceFactory extends DefaultPropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
        factory.setResources(resource.getResource());
        factory.afterPropertiesSet();
        Properties ymlProperties = factory.getObject();
        String propertyName = name != null ? name : resource.getResource().getFilename();
        return new PropertiesPropertySource(propertyName, ymlProperties);
    }

}