• spring boot 在不同环境下读取不同配置文件的一种方式


    在工程中,通常有根据不同的环境读取不同配置文件的需求,对于spring boot 来说,默认读取的是application.yml 或者 application.properties。为了区分不同的环境,也提供了profile的机制。例如,当有一个开发环境的配置文件为application-dev.yml的时候,通过设置 spring.profiles.actives = dev, 程序启动的时候,会优先取 application-dev.yml中的值,然后再去取 application.yml 中的值。

    通过占位符来减少信息冗余

    为了最小的减少信息冗余,可以结合spring properties中的 placeholder 来减少配置文件的编写和维护,举个例子。在 application.properties中,我将数据库的url配置如下;

    spring:
      datasource:
        url: jdbc:mysql://${dbs.database.host}:${dbs.database.port}/${dbs.database.databasename}

    这样,在对于不同环境的配置文件,我只需要配置:

    dbs:
      database:
        host: x.x.x.x
        port: 3306
        username: user
        password: password
        databasename: test

    通过修改--spring.config.location的值来决定配置文件的读取顺序

    如前文所说,spring boot 会根据profile的变量,来决定不同环境配置文件中的值的优先级,但是配置文件的读取顺序,还是先读取application.yml,再读取applicaiotn-{profile}.yml。所以如果照着上一节的设置方式,程序启动会报错,提示找不 ${dbs.database.host} 这个变量。这样反应了,spring properties在解析占位符之前,是要先定义这个占位符变量的。

    为了解决这个问题,可以在程序启动参数里面,通过设置 --spring.config.location 来修改properties的读取顺序,例如可以设置成

    --spring.config.location=classpath:/config/application-test.yml,classpath:/config/application.yml

    这样,就会优先读取application-test.yml中的内容,避开了报错。

  • 相关阅读:
    spring容器启动
    springmvc流程
    bean作用域
    bean的生命周期
    web.xml详解
    设计模式 工厂和抽象工厂
    requests 模块
    爬虫基础
    提高级
    循环语句
  • 原文地址:https://www.cnblogs.com/javanerd/p/6760988.html
Copyright © 2020-2023  润新知