spring boot properties
[转载]
代码从开发到测试要经过各种环境,开发环境,测试环境,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
												
											spring boot properties的更多相关文章
- 玩转spring boot——properties配置
		
前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...
 - spring boot  properties文件与yaml文件的区别
		
编写是没有提示的话在pom中添加依赖,如下: <!-- 配置文件处理器 编写配置时会有提示 --> <dependency> <groupId>org.spring ...
 - spring boot -Properties & configuration
		
72. Properties & configuration72.1 Automatically expand properties at build timeRather than hard ...
 - Spring boot配置文件 application.properties
		
http://www.tuicool.com/articles/veUjQba 本文记录Spring Boot application.propertis配置文件的相关通用属性 # ========= ...
 - spring boot application properties配置详解
		
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
 - 【spring boot】SpringBoot初学(2) - properties配置和读取
		
前言 只是简单的properties配置学习,修改部分"约定"改为自定义"配置".真正使用和遇到问题是在细看. 一.主要 核心只是demo中的: @Proper ...
 - spring boot application.properties 属性详解
		
2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...
 - spring boot application.properties详解
		
附上最新文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-propertie ...
 - Spring boot 全局配置文件application.properties
		
#更改Tomcat端口号 server.port=8090 #修改进入DispatcherServlet的规则为:*.htmlserver.servlet-path=*.html#这里要注意高版本的s ...
 
随机推荐
- Uwp Windows10获取设备位置(经纬度)
			
先在Package.appxmanifest中配置位置权限 2. 创建LocationManager类 using System; using System.Collections.Generic; ...
 - 39-tar  打包压缩
			
将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...
 - Maven的生命周期和插件
			
首先解释下maven build等 Maven build是这个插件让你自己去配置执行目标的.Maven clean 清除上一次Maven执行的结果Maven generate-sources会根据p ...
 - Java网络编程——TCP/UDP
			
UDP:面向无连接 ☆ 将数据及源地址和目的地址封装成数据包中 ☆ 每个数据报的大小限制在64K ☆ 不可靠协议 ☆ 不需要建立连接,速度快 TCP:面向有连接 ☆ 建立连接,形成传输数据的通道 ☆ ...
 - 关于web前端的学习路线
			
第一阶段: HTML+CSS:HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAsc ...
 - 81B
			
模拟 字符串必须先清零,要不会出现玄学的问题 #include<iostream> #include<cstdio> using namespace std; string s ...
 - bzoj 1001
			
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
 - 对TCP/IP网络协议的深入浅出归纳
			
前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...
 - 【USACO 1.5】SuperPrime Rib
			
/* TASK: sprime LANG: C++ SOLVE: dfs,后面每增加一位,判断当前是否为素数. 第一位不能为0 */ #include<cstdio> int n; voi ...
 - 自定义多列排序:C++/Java实现
			
前言: 有些时候,我们在编程中会遇到多列排序的需求.假如在execle,这事儿就太easy了.不过没办法,现在就需要你用Java或者C++实现这样一个功能! 比如将下表无序的数据通过重排之后按照以下规 ...