码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-25 13:35:03      阅读:1135      评论:0      收藏:0      [点我收藏+]

标签:启动参数   文件的   tab   host   工程   方式   优先   user   pass   

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

标签:启动参数   文件的   tab   host   工程   方式   优先   user   pass   

原文地址:http://www.cnblogs.com/javanerd/p/6760988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!