zoukankan      html  css  js  c++  java
  • SpringBoot自定义配置实现与解析

    ​ 在Spring Boot项目中我们有着默认的配置文件application.properties或者是是application.yml,可以进行封装出来的属性进行配置。有的时候我们需要根据不同的环境进行不同的配置。这里Spring Boot也提供了Spring.profiles.active来进行我们不同环境配置的选择,如application-{profile}.properties或者application-{profile}.yml。profile可以是我们的环境变量,如比较常见的dev,test等。

    ​ 此外,Spring Boot也提供了很多我们自定义配置或者自定义配置文件的方法,然后在统一通过它的自动装配来进行实现和管理。这里通过官方文档的介绍然后举几个比较常见使用的例子。

    单属性配置

    通过@Value注解我们可以在一些需要提取到配置文件进行赋值操作。从而避免了对业务代码进行修改。

    如我们创建一个测试类,然后对基本属性使用@Value注解进行测试。

    同时在application.yml文件中,对name进行我们的配置。

    name: "CryFace"
    

    然后在Spring Boot启动的时候就可以发现,我们的参与业务的name是有获取到配置的值并进行到容器的初始化里面。

    然后如果这里的某个属性是要去获取当前环境的系统变量的时候,这里也可以进行设置。这样写法一般用于我们部署的时候去获取当前的系统变量(如端口之类等),如下我以我当前的JDK的环境变量进行测试。如果找不到就输出我们默认的CryFace。(这里对application.yml文件进行修改)

    name: ${JAVA_HOME:CryFace}
    

    配置类+主配置文件

    虽然说我们可以对一些属性进行外部化的配置,但是东一个属性,西一个属性,不仅影响我们的项目整体可观性,而且也很麻烦。所以我们一般将同一类需要配置的属性放到一个类里面,让强类型bean管理和验证应用程序的配置。(这里我们在原来的name属性情况下,额外添加一个age和phone属性便于演示。)

    然后在application.yml文件中进行配置。

    my:
      name: "CryFace"
      age: 22
      phone: "156xxxxxxxx"
    

    但是我们在运行的时候,出现了意外,我们配置的值并没有进行注入。

    这里官网也给了详细的说明:

    也就是说像这样安排依赖于默认的空构造函数,getter和setter通常是必需。而不是像我们的@Value那样,直接注入。这是因为我们通过第二种这样的绑定是通过标准的javabean属性描述符进行的。

    所以这里我们加上getter和setrer之后之后就可以成功运行了。当然,我们在上面引用的时候是直接引用的,这里只加一个setter就可以运行!

    我们还可以在该配置类下,定义静态类,然后在我们配置文件中生成三级目录配置。

    my:
      name: "CryFace"
      age: 22
      phone: "156xxxxxxxx"
      extra:
        address: "Beijing"
        hobbies: ["basketball","football"]
    

    运行测试:

    配置类+自定义配置文件

    当然,有的时候你不想在application文件进行配置或者想单独创建一份配置,这里也可以重新创建一个配置文件。

    properties

    这里如果是properties文件的话,我们按照properties的写法在文件进行配置,然后在我们配置类上面通过注解引入。

    my.name="CryFace"
    my.age=22
    my.phone="156xxxxxxxx"
    my.extra.address="Beijing"
    my.extra.hobbies=["basketball","football"]
    

    yml

    如果是我们yml配置文件的话,我们不需要通过注解来引入文件,而是要到我们application.yml文件中去引入。

    spring:
      profiles:
        include: test2
    

    而且我们的配置文件也有了比较严格的命名要求,必须是application-xxx.yml了。我们可以在profiles的两个参数来进行配置文件的管理。

    active代表我们目前激活在哪个配置文件中,如果不进行设置默认就是当前的application.yml。include可以引入我们当前所激活的配置文件还需要引入的配置文件。举个例子:

    application-dev.yml文件中

    spring:
      profiles:
        include: devRedis,devES,devRocketMQ
    

    application-test.yml文件中

    spring:
      profiles:
        include: testRedis,testES,testRocketMQ
    

    我们在application中通过active选择dev还是test的时候,就相当于同时选择了这些对应的yml配置文件。

    参考资料

    [1] https://docs.spring.io/spring-boot/docs/2.4.4/reference/htmlsingle/#boot-features-external-config

  • 相关阅读:
    css实现鼠标悬浮字体流光背景模糊效果
    原生JS实现省市区(县)三级联动选择
    多线程的对象锁和类锁
    session、cookie与“记住我的登录状态”的功能的实现
    Java NIO FileVisitor 高效删除文件
    mysql 服务启动失败
    Http 协议详解
    设计模式 之 策略模式
    简单探讨 javascript 闭包
    数据库SQL优化大总结之 百万级数据库优化方案
  • 原文地址:https://www.cnblogs.com/CryFace/p/14649295.html
Copyright © 2011-2022 走看看