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=devapplication-{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=12345.使用application.yaml 参数加载
YAML文档也可以比较好的被支持, YamlPropertiesFactoryBean会将yaml文件当初properties来解析的。
spring:
   data.mongodb:
     host:192.168.1.1
     port:27017但是YAML文件不能通过@PropertySource注解加载. 所以,在这种情况下,如果需要使用@PropertySource注解的方式加载值,那就要使用properties文件.
SpringBoot 使用(三): 配置文件详解的更多相关文章
- Nginx知多少系列之(三)配置文件详解
		目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ... 
- springBoot 中 logback配置文件详解
		logback介绍和配置详解 logback是Java的开源框架,性能比log4j要好.是springboot自带的日志框架.该框架主要有3个模块: logback-core:核心代码块(不介绍) l ... 
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
		springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ... 
- SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
		转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot2-config-file/ 本文出自方志朋的博客 ... 
- SaltStack 入门到精通第三篇:Salt-Minion配置文件详解
		SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ 发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 ... 
- Spring Boot 配置文件详解
		Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ... 
- Springboot@Configuration和@Bean详解
		Springboot@Configuration和@Bean详解 一.@Configuration @Target({ElementType.TYPE}) @Retention(RetentionPo ... 
- SPRINGBOOT注解最全详解(
		# SPRINGBOOT注解最全详解(整合超详细版本) 使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 ... 
- SpringBoot-application:application.yml/配置文件详解
		ylbtech-SpringBoot-application:application.yml/配置文件详解 springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优 ... 
随机推荐
- easyUI--datagrid 实现按键控制( enter tab 方向键 )
			1.表格定义时加上 onClickCell: onClickCell,2.定义列时加入编辑器3.引入 key.js 即可使用 enter 键 或者向下箭头 选中单元格下移 选中单元格上移 tab键 选 ... 
- pjsip与QT进行适配
			pjsip是纯C语言写的一个sip协议库,整个代码写得还是比较模块化的,得益于此的设计,只要理解了pjsip的设计,就可以对其网络层进行扩展. 我们项目是QT作为主要开发工具,而PJSIP的库默认是利 ... 
- js动画实现&&回调地狱&&promise
			1. js实现动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ... 
- 02-使用注解配置spring
			1 准备工作 1.导包 4+2+spring-aop[新版本需要导入 spring-aop 包] 2.为主配置文件引入新的命名空间(约束) [context] 3.开启使用注解代理配置文件 4.在类中 ... 
- MongoDB的MapReduce用法及php示例代码
			MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ... 
- FZU 1921——栀子花开——————【线段树单点更新】
			栀子花开 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ... 
- C#基础(第一天)
			Ctrl+K+D:对其代码: #Region #endRegion:折叠多余代码: Ctrl+K+S:可以折叠代码写注释: 语法格式:数据类型 变量名: ... 
- TortoiseSVN安装
			安装说明 开发人员强烈建议使用IDE中的SVN插件更加智能与人性化. 首先安装SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/downloads.html ... 
- OLEDB 调用存储过程
			除了常规调用sql语句和进行简单的插入删除操作外,OLEDB还提供了调用存储过程的功能,存储过程就好像是用SQL语句写成的一个函数,可以有参数,有返回值. 存储过程除了像普通函数那样返回一般的值以外, ... 
- html5 填表 表单 input output 与表单验证
			1.<output> Js计算结果 <form oninput="res.value = num1.valueAsNumber*num2.valueAsNumber ... 
