欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot 属性配置文件详解

程序员文章站 2022-05-01 23:26:44
...

SpringBoot 配置文件默认为application.properties,但现在的趋势是使用yaml,它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。application.properties  文件和 application.yaml 文件的区别后续详解~

一、自定义属性与加载

    把项目中的配置文件application.properties改成application.yaml

  • application.yaml
test:
    user:
        username : zhangsan
        age : 18
        toString: the age of ${test.user.username} is ${test.user.age}
  • 属性类:PropertiesConfig
package com.springboot.testone.bean;

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

@Component
public class PropertiesConfig {

    //通过@Value("${属性名}")注解来加载对应的配置属性
    @Value("${test.user.username}")
    private String username;

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

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getToString() {
        return toString;
    }

    public void setToString(String toString) {
        this.toString = toString;
    }
}
  • 测试Controller
package com.springboot.testone.controller;

import com.springboot.testone.bean.PropertiesConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class HelloController {

    @Autowired
    private PropertiesConfig propertiesConfig;

    @RequestMapping(value = "/test",method = RequestMethod.GET)
    public String hello() {
        //return "hello,this is a springboot demo";

        //return propertiesConfig.getUsername() + ":" + propertiesConfig.getAge();
        return propertiesConfig.getToString();
    }
}

Spring Boot 属性配置文件详解

二、自定义属性注入bean

  • 将上面application.yml文件中的test.user注入到User对象里,注意这里的prefix指定的是test.user,对应配置文件中的结构
package com.springboot.testone.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "test.user")
public class User {

    private String username;

    private int age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  •  测试Controller
    @Autowired
    private User user;

    @RequestMapping(value = "/test2", method = RequestMethod.GET)
    public String test2(){
        return user.getUsername() + ":" + user.getAge();
    }

Spring Boot 属性配置文件详解

三、自定义额外的配置文件

    假如我们不想把有些配置配置在application.yaml/properties中。新建其他配置文件:比如新建test.yaml文件。配置内容如上面的application.yml一样。那么我们注入对象时,应该这么写

@Configuration
@PropertySource(value = "classpath:test.yml")
@ConfigurationProperties(prefix = "test.user")


四、多个环境配置文件

    在现实的开发环境中,我们需要不同的配置环境;格式为application-{profile}.properties,其中{profile}对应你的环境标识,比如:

  • application-test.properties:测试环境
  • application-dev.properties:开发环境
  • application-prod.properties:生产环境

怎么使用?只需要我们在application.yml中加:

spring:
    profiles:
        active: dev

因为主入口都是application.yaml,这里指定配置文件为dev,即启用application-dev.yaml文件

server:
    port: 8888
启动工程,发现程序的端口不再是8080,而是8888,表示开发环境配置成功。


五、官方支持默认配置文件属性

http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#common-application-properties


六、配置文件优先级

  1. 当前目录下的一个/config子目录
  2. 当前目录
  3. 一个classpath下的/config包
  4. classpath根路径(root)

#注意# 如果我们有多个配置文件,优先级高的配置文件中存在和优先级低的配置文件相同属性时,取优先级高配置文件的,不冲突的时候,优先级低的配置文件属性同样会被加载,而不是只加载优先级高的配置文件属性。