原创

SpringBoot读取配置文件信息


@Value 方式

假设配置文件为application.yml

  project:
    path: /project/p1/
    passwd: 123456

通过@Value注解在Bean中读取这两个参数

import org.springframework.beans.factory.annotation.Value;

public class Params {

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

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

}

在配置参数数量较少的情况下,可以使用这个方法进行配置参数读入,但是如果参数比较多,一个一个读取则比较麻烦,所以可以使用以下方式进行绑定读取.

@ConfigurationProperties 方式

假设配置文件为application.yml

  project:
    path: /project/p1/
    passwd: 123456
@Data
@ConfigurationProperties(prefix = "project")
public class Constants {
	private String path;
    private String passwd;
}

这种方法适合批量绑定读取参数,比@Value便捷高效。

@Environment 方式

如果需要在代码执行过程中进行参数绑定读取,则可以使用该注解进行 假设配置文件为application.yml

  project:
    path: /project/p1/
    passwd: 123456
import org.springframework.core.env.Environment;

public class EnvironmentTests {
    @Resource
    private Environment env;
    public void test(){
        String v1 = env.getProperty("project.path");
        System.out.println(v1);
    }
}

或者

import org.springframework.core.env.Environment;
import org.springframework.context.EnvironmentAware;

public class EnvironmentTests implements EnvironmentAware  {
    private Environment env;

    public void test(){
        String v1 = env.getProperty("project.path");
        System.out.println(v1);
    }

    @Override
    public void setEnvironment(Environment environment) {
        this.env = environment;
    }
}

后面这种事不使用自动装配的方式进行绑定,降低耦合性,或者适用于在自动装配之前的操作。

以上三种读取方式都是读取Spring默认的配置文件[application.yml]中的参数。如果需要读取自定义的外部配置文件则需要用下面这个方式

@PropertySources 方式

读取properties格式文件。假设配置文件为test.properties

project.path=/project/p1/
project.passwd=123456
@Data
@Configuration
@PropertySources({@PropertySource(value = "classpath: test.properties", encoding = "utf-8")})
public class PropertySourcesConf {

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

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

}

@PropertySources只能读取properties格式的外部配置文件,如果想要读取yml格式的外部配置文件则需要通过下面这个注解

PropertySourcesPlaceholderConfigurer 方法

假设配置文件为test.yml

  project:
    path: /project/p1/
    passwd: 123456
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import java.util.Objects;

@Configuration
public class MyYamlConf {
    @Bean
    public static PropertySourcesPlaceholderConfigurer yamlConfigurer() {
        PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("test.yml"));
        pspc.setProperties(Objects.requireNonNull(yaml.getObject()));
        return pspc;
    }
}

进行以上配置后,再使用@Value注解进行参数绑定读取即可。

使用Java原生方式

假设配置文件为test.properties

project.path=/project/p1/
project.passwd=123456
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class MyParamsConf {
    public void paramsRead(){
        Properties prop = new Properties();
        try {
            InputStreamReader isr = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("test.properties"), StandardCharsets.UTF_8);
            prop.load(isr);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(prop.getProperty("project.path"));
        System.out.println(prop.getProperty("project.passwd"));
    }
}
SpringBoot
SpringCloud
  • 作者:一介闲人(联系作者)
  • 发表时间: 2024-12-30 15:14
  • 版权声明:原创-转载需保持署名
  • 公众号转载:请在文末添加本文链接
  • 评论