美文网首页
SpringBoot学习笔记day02-Properties

SpringBoot学习笔记day02-Properties

作者: Meditator_6344 | 来源:发表于2018-08-02 22:26 被阅读0次

    SpringBoot的默认配置文件为application.properties,关于springboot的配置都可以放在该文件中。配置内容包括定义容器端口号、数据库连接、日志级别等各种配置信息。
    SpringBoot的配置文件除了可以使用传统的properties之外,还支持使用现在被广泛使用的YAML(发音 /ˈjæməl/ )文件。

    使用YAML配置文件

    yaml示例

    yaml的写法 : k:(空格)v,少了空格则格式不对

    environments:
        dev:
            url: http://dev.bar.com
            name: Developer Setup
        prod:
            url: http://foo.bar.com
            name: My Cool App
    

    与其等价的properties的配置如下:

    environments.dev.url=http://dev.bar.com
    environments.dev.name=Developer Setup
    environments.prod.url=http://foo.bar.com
    environments.prod.name=My Cool App
    

    实际应用中可以使用spring.profiles属性来定义多个不同的环境变量。

    server:
        address: 192.168.1.100
    ---
    spring:
        profiles: development
    server:
        address: 127.0.0.1
    ---
    spring:
        profiles: production
    server:
        address: 192.168.1.120
    

    当环境为development时,加载地址为127.0.0.1
    当环境为production时,加载地址为192.168.1.120
    默认为 192.168.1.100

    YAML值的写法

    • 字面量:普通的值(数字,字符串,布尔)
      k: v:字面直接来写;
      字符串默认不用加上单引号或者双引号;
      "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
      '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
    • 对象、Map(属性和值)(键值对):
      k: v:在下一行来写对象的属性和值的关系;注意缩进对象还是k: v的方式
    friends:
            lastName: zhangsan
            age: 20
    

    行内写法:

    friends: {lastName: zhangsan,age: 18}
    
    • 数组(List、Set):
      用- 值表示数组中的一个元素
    pets:
     - cat
     - dog
     - pig
    

    行内写法

    pets: [cat,dog,pig]
    

    YAML文件不能通过@PropertySource注解加载,如果需要使用该方式,那就必须使用properties文件。

    配置文件中定义自定义参数

    我们可以在springboot配置文件中自定义属性,以及随机数.

    自定义属性:将配置文件中设置的属性映射到javabean中。

    配置文件:person.yml

    person:
        lastName: hello
        age: 18
        boss: false
        birth: 2017/12/12
        maps: {k1: v1,k2: 12}
        lists:
          - lisi
          - zhaoliu
        dog:
          name: 小狗
          age: 12
    

    使用@ConfigurationProperties注入属性

    javaBean:

    /**
     * 将配置文件中配置的每一个属性的值,映射到这个组件中
     * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     *
     * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
     *
     */
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
    
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
    
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    
    

    使用@ConfigurationProperties需要导入以下依赖

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
    </dependency>
    

    使用@Value注入属性

    public class Person {
    
        @Value("${person.last-name}")
        private String lastName;
    
        @Value("#{11*2}")
        private Integer age;
    
        @Value("${person.boss}")
        private Boolean boss;
        private Date birth;
    
        private Map<String,Object> maps;
        private List<Object> list;
    
        private Dog dog;
    

    @Value获取值和@ConfigurationProperties获取值比较

    @ConfigurationProperties @Value
    功能 批量注入配置文件中的属性 一个个指定
    松散绑定(松散语法) 支持 不支持
    SpEL 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型封装 支持 不支持

    配置文件yml还是properties他们都能获取到值;
    如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
    如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

    随机数

    1、随机数

    ${random.value}、${random.int}、${random.long}
    ${random.int(10)}、${random.int[1024,65536]}
    
    

    2、占位符获取之前配置的值,如果没有可以是用:指定默认值

    person.last-name=张三${random.uuid}
    person.age=${random.int}
    person.birth=2017/12/15
    person.boss=false
    person.maps.k1=v1
    person.maps.k2=14
    person.lists=a,b,c
    person.dog.name=${person.hello:hello}_dog
    person.dog.age=15
    

    配置文件加载顺序

    SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring环境中:

    • 当前目录下的/config子目录。
    • 当前目录。
    • classpath下的/config包。
    • classpath根路径(root)。
      该列表是按优先级排序的(列表中位置高的路径下定义的属性将覆盖位置低的)。
      优先级由高到底,高优先级的配置会覆盖低优先级的配置;
      SpringBoot会从这四个位置全部加载主配置文件;互补配置
      我们还可以通过spring.config.location来改变默认的配置文件位置

    项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;
    java -jar springboot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

    相关文章

      网友评论

          本文标题:SpringBoot学习笔记day02-Properties

          本文链接:https://www.haomeiwen.com/subject/zrmkpftx.html