在工程中,通常有根据不同的环境读取不同配置文件的需求,对于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 boot 在不同环境下读取不同配置文件的一种方式的更多相关文章

  1. 在Spring Boot快捷地读取文件内容的若干种方式

    引言: 在Spring Boot构建的项目中,在某些情况下,需要自行去读取项目中的某些文件内容,那该如何以一种轻快简单的方式读取文件内容呢?  基于ApplicationContext读取 在Spri ...

  2. Spring Boot 定义系统启动任务,你会几种方式?

    在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...

  3. Java 读取 .properties 配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

  4. 记录初学Spring boot中使用GraphQL编写API的几种方式

    Spring boot+graphql 一.使用graphql-java-tools方式 <dependency> <groupId>com.graphql-java-kick ...

  5. 读取Properties配置文件, 四种方式都可以得到webroot/WEB-INF/classes这个路径

    下面四种方式都可以得到webroot/WEB-INF/classes这个路径,有什么区别,哪种方式最好? String path = this.getClass().getResource(" ...

  6. Spring 读取XML配置文件的两种方式

    import org.springframework.context.ApplicationContext; import org.springframework.context.support.Cl ...

  7. Java 读取properties 配置文件的几种方式

    基于ClassLoder读取配置文件 Properties properties = new Properties(); // 使用ClassLoader加载properties配置文件生成对应的输入 ...

  8. Java 读取 .properties 文件的几种方式

    Java 读取 .properties 配置文件的几种方式   Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 ...

  9. Spring Boot配置,读取配置文件

    Spring Boot配置,读取配置文件 一.配置Spring Boot 1.1 服务器配置 1.2 使用其他Web服务器 1.3 配置启动信息 1.4 配置浏览器显示ico 1.5 Yaml语法 1 ...

随机推荐

  1. git版本控制工具基本用法讲解(转)

    一.安装Git 在linux系统使用非常方便,只需要打开shell界面,并输入: ? 1 sudo apt-get install git-core 按下回车后输入密码,即可完成Git的安装.但我们可 ...

  2. Vs .Net Framework 灵活配置

    背景:我们开发和部署项目时都是通过注释某些配置项 比如: 在调试时就注释掉生产的配置项,在生产时又要改回来,只有一个还好,如果多的话就会非常容易出错. 问题1:在发布时容易出错,需要控制发布时根据配置 ...

  3. Unity3d自制字体

    这篇教学中会使用到BMFont 这个工具 准备好Unity5.3.2版本,其他版本会有异常 一.制作字体 下载链接: http://www.angelcode.com/products/bmfont/ ...

  4. Nginx服务器的图片防盗链

    全站的防盗链方法 在/usr/local/webserver/nginx/conf//vhost/xxxx.conf文件要添加防盗链的server段里添加下面的代码: location ~ .*\.( ...

  5. Python3中PyMongo的用法

    MongoDB存储 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 连接Mon ...

  6. BZOJ1935:[SHOI2007]Tree 园丁的烦恼(CDQ分治)

    Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...

  7. Java中的HashMap源码记录以及并发环境的几个问题

    HashMap源码简单分析: 1 一切需要从HashMap属性字段说起: /** The default initial capacity - MUST be a power of two. 初始容量 ...

  8. php单例模式实现对象只被创建一次

    这是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. ...

  9. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)

    一.方案选择 通过Lvs+keepalived+mysql(主主同步)实现数据库层面的高可用方案,需要两台服务器作为数据库提供业务数据的存储,应用服务器通过vip访问数据库,允许同一时间内一台数据库服 ...

  10. mybatis多数据源切换

    文章转自https://yq.aliyun.com/articles/188540?t=t1 https://www.liaoxuefeng.com/article/00151054582348974 ...