SpringBoot读取配置的方式

在 Spring Boot 应用中,我们通常需要一些配置信息来指导应用的运行。这些配置信息可以包括如下内容:端口号、数据库连接信息、日志配置、缓存配置、认证配置、等等。Spring Boot 提供了多种方式来读取这些配置信息。读取配置的目的是为了在程序中使用这些配置信息,以便对应用进行正确的配置和处理。读取配置的目的是为了方便我们管理和配置应用,让应用能够按照自己的要求进行工作。

@Value 注解

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

配置内容 

SpringBoot读取配置的方式_第1张图片

结果

SpringBoot读取配置的方式_第2张图片

如果没用配置对应的内容,会报错,需要填写默认值

@Value("${myapp.name:defaultValue}")
private String appName;

结果 

SpringBoot读取配置的方式_第3张图片

@ConfigurationProperties 注解

可以批量注入,比value注解方便 

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties(prefix = "myapp")
@Configuration
@Data
public class MyAppProperties {
        private String name;
        private Integer age;

}

 测试

  @Resource
    private MyAppProperties myAppProperties;

    @Test
    public void test22(){
        System.out.println(myAppProperties.getName());
        System.out.println(myAppProperties.getAge());
    }

结果

SpringBoot读取配置的方式_第4张图片

Environment 对象(实现接口)

import lombok.Data;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.annotation.Resource;
@Configuration
@Data
public class Environmentconfig implements EnvironmentAware {

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

 测试

    @Resource
    private Environmentconfig environmentconfig;

    @Test
    public void test22(){
        String property = environmentconfig.getEnv().getProperty("myapp.name");
        System.out.println(property);
    }

结果

SpringBoot读取配置的方式_第5张图片

Environment 对象(注入方式) 

import lombok.Data;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.annotation.Resource;
@Configuration
@Data
public class Environmentconfig  {
    @Resource
    private Environment env;

}

测试

    @Resource
    private Environmentconfig environmentconfig;

    @Test
    public void test22(){
        String property = environmentconfig.getEnv().getProperty("myapp.name");
        System.out.println(property);
    }

结果

SpringBoot读取配置的方式_第6张图片

@PropertySource 注解

可以读取外部配置

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.core.env.Environment;

import javax.annotation.Resource;

@Configuration
@PropertySources({
        @PropertySource(value = "classpath:myapp.properties",encoding = "utf-8")
})
@Data
public class AppConfig {

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

 写一个外部配置文件

SpringBoot读取配置的方式_第7张图片

测试

    @Resource
    private AppConfig appConfig;

    @Test
    public void test22(){
        System.out.println(appConfig.getName());
    }

PropertySourcesPlaceholderConfigurer

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;

@Configuration
public class MyYamlConfig {
    @Bean
    public static  PropertySourcesPlaceholderConfigurer yamlConfigurer(){
        PropertySourcesPlaceholderConfigurer configurer=  new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml= new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("myapp.yml"));
        configurer.setProperties(yaml.getObject());
        return configurer;
    }


}

外部yml配置文件

SpringBoot读取配置的方式_第8张图片

测试

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

    @Test
    public void test22(){
        System.out.println(name);
    }

结果

SpringBoot读取配置的方式_第9张图片

java原生

    @Test
    public void test22(){
       Properties props=new Properties();


        try {
            InputStreamReader inputStreamReader=new InputStreamReader(
                    this.getClass().getClassLoader().getResourceAsStream("myapp.properties"),
                    StandardCharsets.UTF_8
            );
            props.load(inputStreamReader);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        System.out.println(props.getProperty("test.name"));
    }

或者读取yml文件

    @Test
    public void test22(){

        YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
        factory.setResources(new ClassPathResource("myapp.yml"));
        Properties properties = factory.getObject();

        System.out.println(properties.getProperty("test.name"));

    }

 

配置文件

SpringBoot读取配置的方式_第10张图片

测试

SpringBoot读取配置的方式_第11张图片 

你可能感兴趣的:(工作问题总结,spring,boot,java,后端)