Springboot读配置的4种方式

一、@Value注解
使用该注解需要注意:
(1)该类必须注入spring容器中,才能使用@Value注解获取配置文件中的数据。
(2)配置文件里必须有该属性,不然启动会报异常。

@Component
public class Demo {

    // @Value("${user.name:默认值}") 为了不报异常,可以加默认值,如果是:"${user.name:}",表示值为""
    @Value("${user.name}")
    private String userName; // 如果属性有static和final关键字的话是无法生效的
}

二、@ConfigurationProperties注解
只需要指定配置文件中某一个key的前缀就可以了。例如:

// 配置文件
demo:
    userName: xxx

// Demo
@ConfigurationProperties(prefix = "demo")
public class Demo {

    private String userName;
}

三、通过Environment类动态获取(是spring底层提供的API)
(1)第一种实现方式,实现 EnvironmentAware 接口,重写 setEnvironment 方法

@SpringBootTest
public class Demo implements EnvironmentAware {

    private Environment env;

    @Test
    public void test() {
        String var = env.getProperty("demo.name");
        System.out.println("从配置文件获取" + var);
    }

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

(2)第二种通过自动注入

@SpringBootTest
public class Demo {

    @Resource
    private Environment env;

    @Test
    public void test() {
        String var = env.getProperty("demo.name");
        System.out.println("从配置文件获取" + var);
    }
}

以上三种是获取默认的配置文件,要想获取自定义的配置文件可以通过下面的方法:

  • 默认的配置文件:application开头
  • 自定义:demo.properties

四、@PropertySource注解
只能获取properties的配置文件。

@Configuration
@PropertySources(@PropertySource(value = "classpath:demo.properties",encoding = "utf-8"))
public class Demo {

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

要想获取yml的需要设置配置类。

@Configuration
public class MyYmlConfig {

    @Bean
    public static PropertySourcesPlacehokderConfigurer yamlConfigurer() {
        PropertySourcesPlacehokderConfigurer p = new PropertySourcesPlacehokderConfigurer();
        YamlPropertiesFactory y = new YamlPropertiesFactory();
        y.setResources(new ClassPathResource("demo.yml"));
        p.setProperties(Objects.requireNonNull(y.getObject()));
        return p;
    }
}

然后就可以通过第一种方式@Value注解获取。

你可能感兴趣的:(Springboot读配置的4种方式)