SpringBoot相关配置(二)

二. 配置文件

1. 配置文件

springBoot使用一个全局的配置文件, 配置文件名是固定的:

*application.properties

*application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层给我们自动配置

  • Yaml

    • Yaml不是一个标记语言

    • Yaml是一个标记语言

  • 标记语言

    • 以前的配置文件;大多数都是xxx.xml文件

    • YAML:是以数据为中心,比如json,xml等更适合做配置文件

    yaml基本语法

    1. 基本语法

      1. k: 空格 v:表示键值对(空格必须有)

      2. 以空格的缩进来控制层级的关系;只要是左对齐的一列数据

        
        server:
            prot: 8081
            path: /hello
      3. 属性和值也是大小敏感, 空格注意, 语法很严格

    2. 值的写法

      • 字面量: 普通的值(数字.布尔.字符串)

      • 对象, Map(属性和值), (键值对)

        k: v:在下一行对象的属性和值的关系;注意缩进

        ​ 对象还是k:v的方式

        
        friends:
            lastName: zhangsan
            age: 20

        行内写法

        
        friends: {lastName: zhangsan,age: 20}
      • 数组(List. Set)

        用- 值代表数组中的一个元素

        
        pets:
            - cat
            - dog
            - pig

        行内写法

        
        pet: [cat,dog,pig]

        当然了, 支持复合结构

    配置文件注入(注解模式)

    • @Component

    • @ConfigurationProperties(perfix = "pet")

    只有这个组件是容器中的组件, 才能使用容器中的功能

    或者在字段上面加@Value从配置文件, 环境变量中获取

    那么,@Value和@ConfigurationPropertites获取值的区别

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

    数据校验: 字段上加@Email

    如果,只是在某个业务逻辑中需要获取一下配置文件中的某项值, 使用@value

    如果说, 专门写一个JavaBean来和配置文件进行映射, 就直接使用@ConfigurationProperies

    • @ProperteySource(value = {"classpath:xxxx.properties"}) 可以通过制定加载某个路径下的

    配置文件注入(xml模式)

    @ImportResource: 导入Spring的配置文件,用来导入xml文件,例如:@ImportResource(locations= {"classpath:xxxx.xml"})

    Spring推荐采用全注解模式开发

    • 写个配置类

      
      /**
      @Configuration 指名当前是配置类, 取代Spring 的beal.xml 类的配置文件
      */
      @configuration
      public class MyAppConfig{
          // 将方法的返回值添加到容器中,容器中这个组件的默认id 就是方法名
          @Bean
          public HelloService helloService(){
              return new HelloService();
          }
      }

    配置文件的占位符${xxx}

    • 在application.properties中写

      
      person.id=周周周
      person.dog.name=${person.id}的狗狗
    • 随机数

      
      ${random.value}. ${random.int}
    • 占位符获取之前的配置的值没有用 : 来指定默认值

      
      person.dog=${person.name:baba}

      profile

      1. 多profile文件

      我们在主配置文件编写的收文件名可以是application-{profile}.properties/yml

      默认使用application.properties,但是可以在默认配置文件里写以下参数:

      
      spring.profiles.active=dev

      那么激活使用的则是application-dev.properties

      2.使用yml文档

      3.激活指定profile

      1.配置文件中 spring.profiles.active=dev

      2.命令行:测试时候直接配置参数 --spring.profiles.active=dev(program arguments)

      3.jvm:-Dspring.profiles.active=dev

      配置文件加载位置

      • spring boot启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件

        • file:./config/

        • file:./

        • classpath:/config/

        • classpath:/

        以上是按照优先级别从高到底的顺序,所有位置的文件都会被加载,搞优先级别的内容会覆盖低优先级别配置的内容(不同配置信息互补)

        • 当然我们也可以通过配置spring.config.location来改变默认配置的位置;

        • 这个是当项目打包后, 用命令行参数的形式,启动项目的时候配置,也是和默认位置一起作用,形成互补

    能修改哪些配置呢?

    在springboot官网上Common application properties的目录下有写

    1) springboot启动会加载大量的自动配置类

    2) 我们看我们需要的功能有没有SpringBoot默认写好的自动配置类

    3)我们在看这个自动配置类中到底配置了哪些组件,(如果有, 就不需要再来配置)

    4) 给容器中自动配置类, 添加组价的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定这些属性的值

    5)如何判断,有哪些类生效?把application.properties中配置 debug=true 开启springBoot的debug模式,这样我们就可以很方便的知道哪些配置类生效(启动时候在控制台中,看postive matches)

猜你喜欢

转载自blog.csdn.net/weixin_38399962/article/details/80451064
今日推荐