springboot配置文件详解

  在以前的项目开发中,咱们能够使用xml,properties进行相关的配置,这种配置方式比较简单,可是在应对复杂的商业需求下,多环境和编程化的配置没法获得知足,所以springboot为咱们提供了YAML的配置方式丰富功能和简化开发。spring

一、Properties配置详解

  一般状况下,咱们能够使用properties文件进行相关的配置。数据库

  (1)在resources目录下建立application.properties编程

person.name=zhangsan
person.age=12
person.gender=男
person.desc=my name is ${person.name},my age is ${person.age}

  (2)建立对应的实体类对象springboot

@Component
public class Person {
    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private int age;
    private String sex;
    @Value("${person.desc}")
    private String desc;

    public Person() {
    }

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
} 

  (3)建立对应的测试类服务器

@SpringBootTest
class ConfigApplicationTests {

    @Autowired
    Person person;
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

 

  能够在properties文件中使用随机数app

  (1)在application.properties文件中添加以下属性less

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

  (2)建立对应的实体类运维

@Component
public class My {
    @Value("${my.secret}")
    private String screct;
    @Value("${my.number}")
    private int number;
    @Value("${my.bignumber}")
    private long bignumber;
    @Value("${my.uuid}")
    private UUID uuid;
    @Value("${my.number.less.than.ten}")
    private int lessThanTen;
    @Value("${my.number.in.range}")
    private int numberInRangel;

    @Override
    public String toString() {
        return "My{" +
                "screct=" + screct +
                ", number=" + number +
                ", bignumber=" + bignumber +
                ", uuid=" + uuid +
                ", lessThanTen=" + lessThanTen +
                ", numberInRangel=" + numberInRangel +
                '}';
    }
}

  (3)建立对应的测试类dom

@SpringBootTest
class ConfigApplicationTests {

    @Autowired
    My my;
    @Test
    void contextLoads() {
        System.out.println(my);
    }
}

  多环境配置编程语言

    在实际开发中,咱们的一套代码可能会被同时部署到开发、测试、生产等多个服务器中,每一个环境中诸如数据库密码等这些个性化配置是避免不了的,

    虽然咱们能够经过自动化运维部署的方式使用外部参数在服务启动时临时替换属性值,但这也意味着运维成本增高。

  一、在resources目录下建立多个配置文件

    application-dev.properties

    application-test.properties

    application-prod.properties

    application.properties

spring.profiles.active=dev/test/prod

二、YAML

  YAML是“YAML Ain't Markup Language YAML不是一种标记语言”的外语缩写,但为了强调这种语言以数据作为中心,而不是以置标语言为重点,而用返璞词从新命名。它是一种直观的可以被电脑识别的数据序列化格式,是一个可读性高而且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。它是相似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单不少。

基本原则:
一、大小写敏感 
二、使用缩进表示层级关系 
三、禁止使用tab缩进,只能使用空格键 
四、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。 
五、使用#表示注释 
六、字符串能够不用引号标注

  (1)使用yaml完成多环境配置:application.yaml

spring:
  profiles:
    active: test
---
spring:
  profiles: dev
server:
  port: 8080
---
spring:
  profiles: test
server:
  port: 8081

  (2)使用yaml进行相关参数的设置

person:
  name: zhangsan
  age: 12
  sex: 男
  desc: my name is ${person.name},my age is ${person.age}

  对应的实体类对象

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
//    @Value("${person.name}")
    private String name;
//    @Value("${person.age}")
    private int age;
    private String sex;
//    @Value("${person.desc}")
    private String desc;

    public Person() {
    }

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

三、@ConfigurationProperties 与 @Value 对比

功能 @ConfigurationProperties @Value
松散绑定
元数据支持
spEL表达式