Spring Boot之配置文件

配置文件在项目开发中是必不可少的,它有很多的使用方法,下面就配置文件的一些用法详情。

1. Spring Boot 配置文件加载优先级

        有两种配置文件 properties yml,它们最大的区别就是格式不一样,而在同一目录下properties 的优先级是高于yml;

Spring Boot读取优先级:

        a. 项目根目录下的/config目录下的配置文件。
        b. 项目根目录下的配置文件。
        c. 项目类路径(resources)下的/config目录下的配置文件。
        d. 项目类路径(resources)下的配置文件。

bootstrap和application的优先级
        bootstrap配置文件由spring父上下文加载,并且比application配置文件优先加载(父上下文不会使用application配置文件),而application配置文件由子上下文加载。bootstrap加载的配置信息不能被application的相同配置覆盖。

注意:如果代码中有使用到配置文件中的参数,这时bootstrap和application都有这个参数,那么会优先使用application的参数。

2. Spring Boot 读取配置文件

在项目开发过程中,如果有多套环境,这时我们就不能把代码里面的参数写死,不然每次换环境测试的时候都需要改代码。这时我们就可以把不同环境的变量放到配置文件中,然后从配置文件中获取参数。

a. @Value   

非静态参数:一般情况下可以使用@value直接获取配置文件中的参数。

server.port=8090

@Value("${server.port}")
private String serverPort;

静态参数:当类中的静态方法需要从配置文件读取参数时,需要将参数定义为静态,才可以在静态方法中获取到,这时候就不能只配置个@Value注解就行了。

server.port=8090

@Component
public class Text {

    private static String serverPort;

    @Value("${server.port}")
    public void setServerPort(String serverPort){
        Text.serverPort = serverPort;
    }

}

b. @ConfigurationProperties
@ConfigurationProperties 和 @Value 的使用是不相同的,@Value一次只可以读取一个配置参数,而@ConfigurationProperties 可以读取一组配置参数;

text.name=zan
text.sex=nan

@Component
@ConfigurationProperties(prefix = "text", ignoreUnknownFields = true)
public class ConfigurationPropertiesConfig {

    private String name;

    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}

c. Environment
Environment 是 Spring Core 中的一个用于读取配置文件的类,将此类使用 @Autowired 注入到类中就可以使用它的 getProperty 方法来获取某个配置项的值了。

server.port=8090

@RestController
@RequestMapping("/text")
public class Text {

    @Autowired
    private Environment environment;

    @GetMapping("get")
    public String text(){
        return environment.getProperty("server.port");
    }
}

d. @PropertySource
可以指定读取的配置文件

server.port=8090

@Component
@PropertySource("classpath:application.properties")
public class Text {
    @Value("${server.port}")
    private String serverPort;
}

e. 使用原生方式读取配置文件
当有些场景不能使用注入的形式去获取配置文件中的参数时,可以使用PropertiesLoaderUtils这个工具类去获取到配置文件中的参数。

@RestController
@RequestMapping("/text")
public class Text {

    @GetMapping("get")
    public String text(){
        try {
            return PropertiesLoaderUtils.
                            loadAllProperties("application.properties").get("server.port").toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

3. 其他

配置文件中获取环境变量

在配置文件中,我们只需要使用${变量名}就可以声明一个使用环境变量的值。如果想向这个值声明一个默认值,以确保未在环境变量中找到此值时不会出错,使用${变量名:默认值}即可。

liunx中环境变量  /etc/profile 
export HOST=127.0.0.1

application.properties

host=${HOST:8080}

日志中使用配置文件的参数

当我们在实际开发中,如果遇到日志需要上传到阿里云,而且不同的环境 accessKeyId 和 accessKeySecret 都不同,这时我们就可以根据配置文件来进行区分,可以在日志.xml中获取到配置文件中的参数;

application.properties

logback.accessKeyId=111
logback.accessKeySecret=222
logback.project=aliyun
logback.logStore=aliyun-1


日志.xml



    
    
    
    


文章主要是在实际开发中有使用的场景,并且做个记录,方面下次使用时查阅。

你可能感兴趣的:(java,spring,spring,boot)