zoukankan      html  css  js  c++  java
  • 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中的内容,避开了报错。

  • 相关阅读:
    创建ros的程序包--3
    ROS文件系统介绍--2
    安装并配置ROS环境1
    ros-indigo-desktop-full安装到ubuntu14.04
    嵌入式声卡应用分析---18
    linux用户态定时器的使用---19
    tiny4412 linux+qtopia nfs网络文件系统的挂载
    ActiveMQ
    Web.xml配置详解之context-param
    Spring MVC的多视图解析器配置及与Freemarker的集成
  • 原文地址:https://www.cnblogs.com/javanerd/p/6760988.html
Copyright © 2011-2022 走看看