本文转载自http://www.jianshu.com/p/80621291373b,作者:龙白一梦 我的boss

代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种角色如运维,接口测试, 功能测试,全链路测试的配置,hardcode 肯定不合适,如Spring profile一样写在jar包不合适.分布式应用中一般采用集中管理配置的方式,通过使用开源软件,如阿里的diamond,netflix的consul等等,SpringBoot中提供了各种各样的配置方式,下面一一来分析下.

1.配置方式和优先级

这些方式优先级如下:
a. 命令行参数
b. 来自java:comp/env的JNDI属性
c. Java系统属性(System.getProperties())
d. 操作系统环境变量
e. RandomValuePropertySource配置的random.*属性值
f. jar外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
g. jar内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
h. jar外部的application.properties或application.yml(不带spring.profile)配置文件
i. jar内部的application.properties或application.yml(不带spring.profile)配置文件
j. @Configuration注解类上的@PropertySource
k. 通过SpringApplication.setDefaultProperties指定的默认属性

2.命令行参数

@Componentpublic
class UserProperties {
    @Value("${myname}")
    private  String myname;
}

启动命令: java -jar *.jar --myname="KevinSun"
其他java 系统属性, 操作系统属性都是类似处理方案如果不想通过命令行启动 可以用下面方法取消.

SpringApplication.setAddCommandLineProperties(false);

3. application-{profile}.properties参数加载

不同的环境可能需要不同配置,可以通过
application{profile}.properties来解决这个问题.
首先:新建application-dev..properties 文件,增加需要参数其次启动命令:

  java -jar  ***.jar  --spring.profiles.active=dev

application-{profile}.properties 文件和默认的application.properties的加载方式本质是一致的,可以参照4中的内容.需要注意的是:application.properties 会首先被加载.

然后:从application-{profile}.properties中获取替换,所以一些基本固定的值可以写在application.properties, 然后个性化配置写在application-{profile}.properties中。

具体用法参照我的:第十四章 springboot + profile(不同环境读取不同配置)

4.application.properties 参数加载

SpringBoot中默认的从application.properties文件中加载参数,大量情况下默认是写在这个文件中的.
a. application.properties 读取的优先级
i. file:./config/ 当前jar目录的config
ii. file:./ 当前jar目录
iii. classpath:/config/ jar包中classpath的 config目录下
iv. classpath:/ jar包中classpath 路径下
排列的顺序 就是 加载的优先级,application.properties只会被加载一次
b. 使用自定义文件
如果你觉得 application.properties不够酷,你可以定义自己的文件名, 这里也有两种方式
i. 使用命令

  java -jar  ***.jar --spring.config.name=myproject

这时就会加载myproject.propertie并且 application.properties不会被加载的.
ii. 使用命令

 java -jar  ***.jar  spring.config.location=classpath:/myproject.properties

这种情况下 application.properties也是会被加载,使用方式application-{profile}.properties相同.
c. 使用${}进行属性占位符替换

spring.data.mongodb.host=192.168.1.1
spring.data.mongodb.port=1234
spring.data1.mongodb.host=${spring.data.mongodb.host}_test
spring.data1.mongodb.port=${spring.data.mongodb.port}_test
spring.data1.mongodb.database=${random.value}_test

注意最后一个配置,这使用random 生产随机值的方式, 在测试中可以用来造数据。
d. 类型安全加载
使用@value 进行属性的注入有的时候可能比较笨重, spring 提供一种强类型的bean 来替代这种方式

@Configuration
@EnableConfigurationProperties(UserProperties.class)
public class MyConfiguration{

}
@Component
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class UserProperties {
    private  String host;
    private  int prot;

}
spring.data.mongodb.host=192.168.1.1
spring.data.mongodb.port=1234

文/龙白一梦(简书作者)
原文链接:http://www.jianshu.com/p/80621291373b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

【附5】springboot之配置文件的更多相关文章

  1. 附 5 springboot之配置文件

    本文转载自http://www.jianshu.com/p/80621291373b,作者:龙白一梦 我的boss 代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境 ...

  2. 附4 springboot源码解析-run()

    public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); / ...

  3. SpringBoot之配置文件加载位置

    1.SpringBoot启动会扫描application.properties或者application.yml文件作为springboot的配置文件.默认创建项目生成application.prop ...

  4. [SpringBoot] - 了解什么是SpringBoot,使用SpringBoot的配置文件

    首先明白Spring是什么,Spring是Java开发的一个框架,为了方便简化Java开发. 什么是注解(注解式开发)? Spring的常用注解有哪些? 假如用SpringBoot构建一个网站程序,应 ...

  5. springboot读取配置文件的顺序

    前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,ap ...

  6. SpringBoot读取配置文件源码探究

    1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...

  7. springboot yml配置文件注入值

    1.编写javabean: package com.example.springboot.bean; import org.springframework.boot.context.propertie ...

  8. SpringBoot:配置文件及自动配置原理

    西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...

  9. SpringBoot系列:二、SpringBoot的配置文件

    SpringBoot的配置文件在resources文件夹下 springboot的配置文件支持两种形式的写法,一种是经典的properties另一种是yml yml通过空格缩进的形式来表示对象的层级关 ...

  10. 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

    前言 有的时候,配置信息是我们无法在开发过程中就能确定的.比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等.这时候,就需要把配置文件放在外面,让用户自定义配置部 ...

随机推荐

  1. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  2. 可以搜索到DedeCms后台文章列表文档id吗?或者快速定位id编辑文章

    我们在建站时有的时候发现之前的文章有错误了,要进行修改,但又不知道文章名,只知道大概的文章id,那么可以搜索到DedeCms后台文章列表文档id吗?或者快速定位文章id方便修改? 第一种方法:复制下面 ...

  3. TC命令流量控制测试(针对具体IP地址和IP协议)

    这里测试系统为Linux操作系统,通过简单的TC命令来实现对带宽的控制. 1对具体IP地址的流量控制 这里采用iperf来进行带宽的测试,首先在服务器和客户端都安装上iperf软件,通过该软件下的命令 ...

  4. Gson的两种解析用法

    第一种. 常见的解析,直接将json字符串解析为对应的类. public JavaBean getJsonString(String jsonString) { Gson gson = new Gso ...

  5. Bus System(Flody)

    http://acm.hdu.edu.cn/showproblem.php?pid=1690 坑爹的题,必须用__int64 %I64d(以前没用过) 因为这题的数据特别大,所以用-1 #includ ...

  6. opencv3寻找最小包围矩形在图像中的应用-滚动条

    #include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace c ...

  7. zw版【转发·台湾nvp系列Delphi例程】HALCON max_connection

    zw版[转发·台湾nvp系列Delphi例程]HALCON max_connection procedure TForm1.Button1Click(Sender: TObject);var ho_I ...

  8. 使用IDEA 搭建SpringMVC +Easyui 实现最简单的数据展示功能

    效果图如下: 步骤如下: 1.导入jquery-easyui-1.5.5.6 2.导入相关的SpringMVC 的jar 包 3.编写datagrid.jsp 页面 <%-- Created b ...

  9. [转载]INNER JOIN连接两个表、三个表、五个表的SQL语句

    SQL INNER JOIN关键字表示在表中存在至少一个匹配时,INNER JOIN 关键字返回行. 1.连接两个数据表的用法: FROM Member INNER JOIN MemberSort O ...

  10. String和StringBuffer和StringBuilder

    String类 Java语言中用String类代表不可变的字符串,它是由任意多个字符组成的序列.程序中需要存储大量的信息时,一般都用String对象. 1.字符串初始化 JavaSE API为字符串对 ...