• springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、profile多环境配置、devtools热部署


    导言

    第二章
    6 配置文件读取
    7静态工具类读取配置文件
    8 profile
    9 热部署

    一、配置文件语法

    1. 了解配置文件

    当我们使用spring 初始化器构建完一个Spring Boot项目后,只需引入一个web启动器的依赖,它就变成一个web项目了,而且呢我们 什么都没有配置就能通过localhost:8080进行访问了,那这是为什么呢?

    那是因为Spring Boot在底层已经把配置信息都给我们自动配置好了。 那我们怎么去修改默认配置信息?

    在使用Spring 初始化器创建一个Springboot项目的时候会在resources目录下自动生成一个文件 application.properties,这是一个空 文件,它的作用是提供我们修改默认配置信息的入口。

    Spring Boot还提供给我们另外一种风格的配置文件 application.yml,虽然是两个不同的文件但是本质是一样的,区别只是其中的语法 略微不同。下面我们就来一一介绍一下这两种不同风格的配置文件。

    2. Properties 语法

    application.properties 配置文件比较简单,形式如下

    • key = value

    不需要空格进行区分,父属性和子属性之间是以“.”进行区分的

    3. YML 语法

    1. 大小写敏感。
    2. k:(空格)v:表示一对键值对(空格必须有),以空格的缩进来控制层级关系。
    3. 只要是左对齐的一列数据,则表示都是同一个层级的。
    4. “#” 表示注释,从这个字符一直到行尾,都会被解析器忽略。

    4. 例子

    我们写一个简单的例子看看它们之间的区别:配置端口号

    • 以前是这样配置的
      <server>
        <port>8080port>
      server>
      
      • 1
      • 2
      • 3
    • 现在是这样配置的
      • application.yml
        server:
          port: 8080
        
        • 1
        • 2
      • application.properties
        server.port=8080
        
        • 1

    二、配置文件读取

    1. 创建工程

    1. 在配置文件加上配置信息
    2. 创建一个Person实体类用来验证@Value 读取配置文件属性是否成功
    3. 创建一个PersonConfig 配置类读取属性
    4. 把属性set到Person注入到容器
    5. 单元测试拿到person实例打印它

    2. 简单的数据类型读取-@Value

    a、修改默认配置文件

    • 修改 application.properties
      #基本类型 
      person.userName=zhangsan 
      person.age=29 
      person.salary=22000 
      person.sex=male
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 创建 application.yml (和application.properties本质一样 两者选其一 )
      person:
        userName: zhangsan
        age: 29
        salary: 220000
        sex: male
      
      • 1
      • 2
      • 3
      • 4
      • 5

    b、属性注入类

    创建 Person javabean

    
    
    • 1

    c、 声明配置类

    创建 PersonConfig 配置类

    
    
    • 1

    d、单元测试

    创建 SpringBootDemoApplicationTests Junit 单元测试

    
    
    • 1

    测试输出

    3. 配置文件读取- @ConfigurationProperties

    1. 配置文件配置复杂的内容
    2. 创建映射实体
    3. 屏蔽PersonConfig 配置类的代码
    4. 修改 Person 实体类
    5. 打印person实体

    a、修改配置文件置

    • application.Properties
    #基本类型 
    person.userName=zhangsan 
    person.age=29 
    person.salary=22000 
    person.sex=male
    #array
    person.pets=dog,cat
    #map 
    person.friend.userName=wangwu 
    person.friend.age=28
    #list
    person.list[0]=value1 
    person.list[1]=value2 
    #list嵌套Map/对象 
    person.children[0].name=ting 
    person.children[0].weight=2 
    person.children[1].name=hao 
    person.children[1].weight=5 
    #对象嵌套对象 
    person.employee.name=lisi 
    person.employee.age=21
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • application.yml
    person:
      userName: zhangsan
      age: 29
      salary: 220000
      sex: male
      pets: cat,dog
      friend:
        userName: wangwu
        age: 27 
      list:
        - value1
        - value2
      children:
        - name: ting
          weight: 2
        - name: hao
          weight: 5
      employee:
        name: lisi
        age: 21
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    b、注释 PersonConifg

    c、创建 Employee 实体类

    
    
    • 1

    d. 修改 person 实体类

    
    
    • 1

    e. 单元测试

    4. 注解解读

    @ConfigurationProperties 注解向Spring Boot声明该类中的所有属性和配置文件中相关的配置进行绑定。
    prefix = “person”:声明配置前戳,将该前戳下的所有属性进行映射。
    @Component 将该组件加入Spring Boot容器,只有这个组件是容器中的组件,配置才生效。

    三、 静态工具类读取配置文件

    在日常开发中经常会遇到这种情况,就是有一些方法经常用到但是呢又需要外部的一些静态常量(各个环境的值是不一样的)进行组装, 所以呢我们会把这些方法抽出来统一放在一个工具类里面,大家也知道通常来说工具类里面都是一些静态的方法,后续在其它地方使 用的时候直接工具类.方法就可以了。但是呢我们的方法改成静态方法后,里面用到的变量也同样要改成静态的变量,这里就涉及到了 静态属性的注入问题,如果我们还像上小节那样用 @Value 直接注入是注入不进来的。
    那么我们怎么去改造呢?怎么才能把它 注入到静态的变量 呢?好下面我们就来实践一下。

    1. 加入配置文件信息
    2. 新增一个配置读取类:TokenSettings
    3. 新增静态工具类 :JwtTokenUtil
    4. 创建一个代理工具类:StaticInitializerUtil
    5. 单元测试

    四、Spring Boot Profile 多环境配置

    我们在开发项目时,通常同一套程序会被发布到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、redis地 址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。

    对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要 打包的内容之后进行区分打包,而Spring Boot 就更简单了,打好包后,只需在不同的环境下启动时候指定读取的配置文件就可以了。

    在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

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

    至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile} 值。
    如:spring.profiles.active=test就会加载application-test.properties配置文件内容

    五、Spring Boot devtools热部署

    1. 创建工程

    2. 引入 依赖

    3. 配置 plugin

    4. 开启自动编译

    5. IDEA 设置运行程中,允许自动编译

    操作: ctrl + shift + alt + /,选择Registry,勾选勾上 Compiler autoMake allow when app running

    重启 IDEA

    6. 手动触发编译

  • 相关阅读:
    98. 验证二叉搜索树
    五丰黎红引领新营销模式:布局一物一码数字化营销,提高调味品销量和复购率
    【差分演化算法相关文献总结】
    Android 裁剪摄像头预览窗口-SurfaceView
    数据挖掘、机器学习、深度学习的区别
    ES聚合统计
    Flask框架——MongoEngine使用MongoDB数据库
    flink的AggregateFunction,merge方法作用范围
    论文阅读-Federated Social Recommendation with Graph NeuralNetwork
    微服务项目:尚融宝(60)(核心业务流程:个人中心)
  • 原文地址:https://blog.csdn.net/qq_40036754/article/details/126052361