美文网首页
十七 . Spring-boot获取配置文件值

十七 . Spring-boot获取配置文件值

作者: 任未然 | 来源:发表于2019-10-16 10:07 被阅读0次

    一、简介

    官方配置文档

    当创建完工程之后默认在工程的sources目录下会有一个application.properties的配置文件,在该配置文件中可以指定我们工程中的不变的属性,名字一般是固定的死的(不建议修改);springboot支持两个格式的配置:

    • application.properties
    • application.yml

    properties

    server.port=9000
    server.servlet.context-path=/api
    server.address=127.0.0.1
    

    yml

    server:
      port: 8000
      servlet:
        context-path: /api
      address: 127.0.0.1
    

    二、常用配置文件位置

    2.1说明

    Spring boot 的配置文件可以在classpath下也可以是从指定的file路径下

    2.2加载顺序

    1. classpath:/config/
    2. classpath:/
    • springboot首先会从classpath下的/config目录下查找配置文件, 然后在classpath的根目录查找,查找的顺序/config优于classpath

    • 当同级目录同时有application.propertiesapplication.yml,那么application.properties里面的属性就会覆盖application.yml里的属性。

    三、读取YML文件属性

    Spring Boot提供自定义配置组件,但有些时候我们需要在配置文件自定义一些属性,那我们如何获取这些自定义的属性的值呢?

    application.yml

    user:
      name: 测试自定义属性
      address:
        - 上海
        - 北京
        - 深圳
        - 武汉
        - 长沙
      detail:
        phone: 130xxx
    

    3.1 单个值获取

    使用@Value注解,可以在程序的任意类中使用,当我们只需要配置属性的单个值的时候可以使用@Value

    public  class TestConfiguration{
      @Value("${user.name}")
      private String name;
      @Value("${user.detail.phone}")
      private String phone;  
    }
    

    3.2 一次性加载

    当配置的值比较多的时候,我们可以使用@ConfigurationProperties注解一次性将配置文件中配置的每一个属性的值,映射到这个组件中

    在pom.xml中导入

    <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    
    // 或者@Configuration
    @Component 
    @ConfigurationProperties("user")
    @Data
    public class User {
        private Map<String,String> detail;
        private List<String> address;
        private String name;
    }
    

    @ConfigurationProperties

    • 该注解向Spring Boot声明该类中的所有属性和配置文件中相关的配置进行绑定。

    • prefix = "user":声明配置前戳,将该前戳下的所有属性进行映射。

    • @Component 或者@Configuration:将该组件加入Spring Boot容器,只有这个组件是容器中的组件,配置才生效。

    两种方式对比

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

    自动提示功能

    在idea中开启

    image

    五、读取properties文件属性

    5.1 新建一个user.properties

    user.name=小王
    user.age=18
    user.sex=男
    

    5.2 读取

    @PropertySource("classpath:user.properties")  //指定properties文件的位置
    public class User{
        @Value("${user.name}")
        private String name;
        @Value("${user.age}")
        private int age;
        @Value("${user.sex}")
        private String sex;
    }
    

    六、多配置文件

    说明

    我们在主配置文件编写的时候,文件名也可以是 application-{profile}.properties/yml,默认使用application.properties的配置

    例如我们的一个项目基本的会有三种环境,开发dev,测试test,生产 produce。每个环境下的配置文件的内容都会不同,所以需要在不同环境下使用不同的配置文件

    4.1 配置文件

    application-pro.yml

    server:
      port: 8080
    

    application-dev.yml

    server:
      port: 8081
    

    application-test.yml

    server:
      port: 8082
    

    4.2 激活配置文件

    激活配置文件的方式有两种

    一种在主配置文件application.yml中 使用spring.profiles.active 属性指定使用哪个配置文件

    spring:
      profiles:
        active: dev
    

    另外一种打包后可以通过命令行参数的方式指定配置文件

    java -jar app.jar --spring.profiles.active=dev
    

    相关文章

      网友评论

          本文标题:十七 . Spring-boot获取配置文件值

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