SpringBoot 使用(三): 配置文件详解
代码从开发到测试要经过各种环境,开发环境,测试环境,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 使用(三): 配置文件详解相关推荐
- SpringBoot中的配置文件详解(yml、properties全局配置和自定义配置、有趣的banner图配置)
✌ 作者简介:信年✘ ✌,大家可以叫我 ❤信年❤ ,一位精通五门语言的博主 ✌
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- SpringBoot非官方教程 | 第二篇:SpringBoot配置文件详解
springboot采纳了建立生产就绪Spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- BIND配置文件详解(三)
本文档摘录自<BIND9管理员手册>,如果有不对或者不清楚的地方,请大家告诉我,谢谢! BIND配置文件详解(三) 7.server语句 服务器(server)语句的定义和使用: ...
- Springboot@Configuration和@Bean详解
Springboot@Configuration和@Bean详解 一.@Configuration @Target({ElementType.TYPE}) @Retention(RetentionPo ...
- SpringBoot (6)---RestTemplate方法详解(2)
SpringBoot (6)---RestTemplate方法详解(2) 说明 上一篇SpringBoot 2.1 | 第三篇:RestTemplate请求HTTP(1)简单运用了RestTempla ...
- nginx学习简介-安装-启动-命令-nginx配置文件详解
nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...
- CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解
Haproxy配置 永久修改名字:便于区分虚拟机! Haproxy:hostnamectl set-hostname haproxy Web1: hostnamectl set-hostname WE ...
最新文章
- 利用脑机接口从鸟的脑电波中重现鸟唱歌声
- 转入肥胖基因改造RNA,作物增产50%
- 了解linux内核必读的5本书
- R语言编程艺术#01#数据类型向量(vector)
- 跨链(5)“蚂蚁区块链”之预言机
- POI (Apache POI)
- Linux 命令(88)—— more 命令
- Bailian2728 第一个C++程序【水题】
- ARM-LINUX自动采集温湿度传感器数据
- Lattice FPGA 开发工具Diamond使用流程总结——仿真+debug
- 分布式集群中网络分区问题
- css中aspect,CSS属性之aspect-ratio
- Kaggle_NBME NLP比赛Baseline详解(2)
- java代码word转pdf
- kafka | 生产者压缩算法面面观
- 深入理解 Java 反射:Class (反射的入口)
- 斯托曼与林纳斯的恩怨纠葛,天才往往都很固执
- 2019第一次软件培训 --- C语言
- 【Java】快速傅里叶变换FFT的程序实现(时间抽取的基-2FFT、倒位计算、蝶形运算)
- 【GitHub探索】python调试利器——pysnooper源码分析