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

1.配置方式和优先级

这些方式优先级如下:
a. 命令行参数
b. 来自java:comp/env的JNDI属性
b. 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中。

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

5.使用application.yaml 参数加载

YAML文档也可以比较好的被支持, YamlPropertiesFactoryBean会将yaml文件当初properties来解析的。

spring:data.mongodb:host:192.168.1.1 port:27017

但是YAML文件不能通过@PropertySource注解加载. 所以,在这种情况下,如果需要使用@PropertySource注解的方式加载值,那就要使用properties文件.

SpringBoot 使用(三): 配置文件详解相关推荐

  1. SpringBoot中的配置文件详解(yml、properties全局配置和自定义配置、有趣的banner图配置)

     ✌ 作者简介:信年✘ ✌,大家可以叫我 ❤信年❤ ,一位精通五门语言的博主 ✌

  2. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  3. SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  4. SpringBoot非官方教程 | 第二篇:SpringBoot配置文件详解

    springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  5. BIND配置文件详解(三)

    本文档摘录自<BIND9管理员手册>,如果有不对或者不清楚的地方,请大家告诉我,谢谢!   BIND配置文件详解(三)   7.server语句 服务器(server)语句的定义和使用: ...

  6. Springboot@Configuration和@Bean详解

    Springboot@Configuration和@Bean详解 一.@Configuration @Target({ElementType.TYPE}) @Retention(RetentionPo ...

  7. SpringBoot (6)---RestTemplate方法详解(2)

    SpringBoot (6)---RestTemplate方法详解(2) 说明 上一篇SpringBoot 2.1 | 第三篇:RestTemplate请求HTTP(1)简单运用了RestTempla ...

  8. nginx学习简介-安装-启动-命令-nginx配置文件详解

    nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...

  9. CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解

    Haproxy配置 永久修改名字:便于区分虚拟机! Haproxy:hostnamectl set-hostname haproxy Web1: hostnamectl set-hostname WE ...

最新文章

  1. 利用脑机接口从鸟的脑电波中重现鸟唱歌声
  2. 转入肥胖基因改造RNA,作物增产50%
  3. 了解linux内核必读的5本书
  4. R语言编程艺术#01#数据类型向量(vector)
  5. 跨链(5)“蚂蚁区块链”之预言机
  6. POI (Apache POI)
  7. Linux 命令(88)—— more 命令
  8. Bailian2728 第一个C++程序【水题】
  9. ARM-LINUX自动采集温湿度传感器数据
  10. Lattice FPGA 开发工具Diamond使用流程总结——仿真+debug
  11. 分布式集群中网络分区问题
  12. css中aspect,CSS属性之aspect-ratio
  13. Kaggle_NBME NLP比赛Baseline详解(2)
  14. java代码word转pdf
  15. kafka | 生产者压缩算法面面观
  16. 深入理解 Java 反射:Class (反射的入口)
  17. 斯托曼与林纳斯的恩怨纠葛,天才往往都很固执
  18. 2019第一次软件培训 --- C语言
  19. 【Java】快速傅里叶变换FFT的程序实现(时间抽取的基-2FFT、倒位计算、蝶形运算)
  20. 【GitHub探索】python调试利器——pysnooper源码分析

热门文章

  1. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
  2. 安装NFS服务,并挂载到开发板
  3. 设计模式:装饰者模式(Decorator)
  4. 值得阅读的C语言开源项目代码
  5. 前端一HTML:二: html开发工具
  6. Oracle Enterprise Manager 11g: Empowering IT to Drive Business Value
  7. j2se学习中的一些零碎知识点2之基础知识
  8. 第1章列表处理——1.1 Lisp列表
  9. Css3从IE6-IE9的支持查看
  10. yum安装zlib出错