SpringBoot读取配置的6种方式

本文详细介绍了SpringBoot中6种配置文件读取方法,包括@Value注解、@ConfigurationProperties、Environment接口、PropertySources、PropertySourcesPlaceholderConfigurer和原生输入流,以及它们的使用场景和注意事项。
摘要由CSDN通过智能技术生成

SpringBoot读取配置的6种方式

1.@Value(推荐使用)

  • 通过@Value注解绑定配置文件的某一个key,就可以直接读取配置,并给变量赋值。
  • yaml文件:
value:
  name: 小陈Coding
  • JavaBean
@SpringBootTest
public class ValuesTest {

    @Value("${value.name}")
    private String name;

    @Test
    void test1(){
        System.out.println("@Value:" + name);
    }
}
  • 注意:Java类必须是Java Bean且属性不能被staticfinal修饰,不然@Value会失效,yaml文件的配置必须存在,不存在会报错,为了增加容错,可以给@Value添加默认值
@SpringBootTest
public class ValuesTest {
    @Value("${value.name}:小陈Coding")
    private String name;

    @Test
    void test1() {
        System.out.println("@Value:" + name);
    }
}
  • 如果yaml配置存在且默认值存在则会追加
    在这里插入图片描述

2.@ConfigurationProperties(推荐使用)

  • 只需指定某个key的前缀,前缀下的key将自动绑定到类当中的同名的属性成员变量中。(适用批量绑定,比@Value更加高效)
  • yaml文件
value:
  id: 1
  name: 小陈Coding
  • JavaBean
@Component
@Data
@ConfigurationProperties(prefix = "value")
public class ValueTest1 {

    private String id;

    private String name;
}
  • 注意:有时会报未通过 @EnableConfigurationProperties 注册、标记为Spring 组件或通过@ConfigurationPropertiesScan 扫描
    只需在JavaBean上添加@EnableConfigurationProperties注解即可
  • 测试结果
    在这里插入图片描述

3.Environment

  • 无需自定义JavaBean配置,直接注入Environment或者实现EnvironmentAware接口即可
  • Test类1
@SpringBootTest
public class ValuesTest {

    @Autowired
    private Environment env;

    @Test
    void test1() {
        System.out.println("Environment:" + env.getProperty("value.id"));
        System.out.println("Environment:" + env.getProperty("value.name"));
    }
}
  • Test类2
@SpringBootTest
public class ValuesTest implements EnvironmentAware {

    private Environment env;

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

    @Test
    void test1() {
        System.out.println("Environment:" + env.getProperty("value.id"));
        System.out.println("Environment:" + env.getProperty("value.name"));
    }
}
  • 测试结果
    在这里插入图片描述

以上三个方法都是获取Spring默认的全局配置文件,接下来介绍三种获取自定义配置文件的方法

4.@PropertySources

通过@PropertySources指定配置类,通过@PropertySource指定配置文件的类路径,通过@Value绑定属性变量的值

  • properties配置文件
value.id=1
value.name=小陈Coding
  • JavaBean
@Configuration
@Data
@PropertySources({
        @PropertySource(value = "classpath:xiaoChenCoding.properties",encoding = "utf-8")
})
public class ValueTest1 {

    @Value("${value.id}")
    private String id;

    @Value("${value.name}")
    private String name;
}
  • 测试结果
    在这里插入图片描述

注意:此方法只能读取properties文件
那么怎么读取yaml文件呢,第五个方法来了

5.PropertySourcesPlaceholderConfigurer

  • 通过注册PropertySourcesPlaceholderConfigurerBean配合@Value获取自定义yaml文件
  • PropertySourcesPlaceholderConfigurerBean
/**
 * 自定义yaml配置类
 */
@Configuration
public class MyYamlConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer myYamlConfig(){
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("xiaoChenCoding.yaml"));
        configurer.setProperties(Objects.requireNonNull(yaml.getObject()));
        return configurer;
    }
}
  • yaml文件
value:
  id: 1
  name: 小陈Coding
  • JavaBean
@Component
@Data
public class ValueTest1 {

    @Value("${value.id}")
    private String id;

    @Value("${value.name}")
    private String name;
}
  • 测试结果
    在这里插入图片描述

6.原生输入流

  • 通过输入流读取配置文件
  • 注意:只能读取properties文件
  • Test
@SpringBootTest
public class ValuesTest{

    @Test
    void test1() {
        Properties properties = new Properties();
        try{
            InputStreamReader inputStreamReader = new InputStreamReader(
                    this.getClass().getClassLoader().getResourceAsStream("xiaoChenCoding.properties")
            );
            properties.load(inputStreamReader);
        }catch (Exception e){
            System.out.println(e);
        }
        System.out.println("输入流:" + properties.getProperty("value.id"));
        System.out.println("输入流:" + properties.getProperty("value.name"));
    }
}
  • 测试结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值