springboot 入门二- 读取配置信息一
在上篇入门中简单介绍下springboot启动使用了大量的默认配置,在实际开发过程中,经常需要启动多个服务,那端口如何手动修改呢? 此篇就是简单介绍相关的配置文件信息。
Spring Boot允许外部化你的配置,这样你就可以在不同的环境中使用相同的应用程序代码。你可以使用属性文件、YAML文件、环境变量和命令行参数来外部化配置。属性的值获取可以通过注解@Value 、 spring Environment或注解@ConfigurationProperties
这些方式优先级如下:
- @TestPropertySource / @SpringBootTest#properties 注解用于测试中。
- 命令行参数(参数使用--xxx=yyy方式来传递)
- -》 SPRING_APPLICATION_JSON='{"foo":{"bar":"spam"}}' java -jar myapp.jar
- -》 java -jar myapp.jar --spring.application.json='{"foo":"bar"}'
- -》java -jar myapp.jar --foo=bar --server.port=9090
ServletConfig初始化参数ServletContext初始化参数- 来自
java:comp/env的JNDI属性 - Java系统属性(
System.getProperties()) - 操作系统环境变量
RandomValuePropertySource配置的random.*属性值- my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
- my.number=${random.int}
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包外部的application.properties或application.yml(不带spring.profile)配置文件jar包内部的application.properties或application.yml(不带spring.profile)配置文件@Configuration注解类上的@PropertySource- 通过
SpringApplication.setDefaultProperties指定的默认属性
以上只是springboot提供的方式,在日常工作中最常用的就是*.properties 、 *.yml
一、属性文件配置路径
SpringApplication将加载application.properties,并将它们添加到Spring环境,可以从以下路径加载(优先级):
1、当前项目的/config子目录
2、当前目录
3、classpath的下的/config
4、类的classpath 根目录
注意:
yml是一个类似展示树状结构层次,比较方便查阅。但它需要比较严格的写法要求:属性名的值和冒号中间必须有空格,如name: Isea533正确,name:Isea533就是错的;不能使用tab键。
/config优先于classpath根目录、 *.properties 优先 *.yml
二、profile属性文件
在应用程序中有很多配置项,例如数据库连接地址、日志文件位置、应用服务器配置等等。为了安全与灵活性,推荐将配置文件放在生产环境的服务器上,并严格控制访问权限。在运行应用时可以通过参数指定配置文件。
springboot提供规则的命名文件读取来区分环境:application-{profile}.properties
默认的文件是application-default.properties
设定测试环境:application-test.properties
只需要在主application.properties加上配置
spring.profiles.active=test
就读取测试环境配置属性。
三、属性占位符
例如:
app.name=MyApp
app.description=${app.name} is a Spring Boot application
可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。
通过如${app.name:默认名称}方法还可以设置默认值,当找不到引用的属性时,会使用默认的属性。
由于${}方式会被Maven处理。如果你pom继承的spring-boot-starter-parent,Spring Boot 已经将maven-resources-plugins默认的${}方式改为了@ @方式,例如@name@。
四、属性名称匹配规则
例如有如下配置对象:
@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
private String firstName;
}
firstName可以使用的属性名如下:
person.firstName,标准的驼峰式命名person.first-name,虚线(-)分割方式,推荐在.properties和.yml配置文件中使用PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用
五、其它默认配置查看及修改
要调整自己使用的配置,首先要了解springboot maven 引导层级关系

spring-boot-autoconfigure.jar 此为自动加载各种配置的。
tomcat服务相关配置: org.springframework.boot.autoconfigure.web.ServerProperties
spring.mvc的配置:org.springframework.boot.autoconfigure.web.WebMvcProperties
其它web相关配置都在web目录下相对应的类中。
springboot 入门二- 读取配置信息一的更多相关文章
- springboot 入门三- 读取配置信息二(读取属性文件方式)
在上篇文章中简单介绍自带读取方式.springboot提供多种方式来读取 一.@ConfigurationProperties(value="my") 支持更灵活的绑定及元数据的支 ...
- springboot 入门八-自定义配置信息(编码、拦截器、静态资源等)
若想实际自定义相关配置,只需要继承WebMvcConfigurerAdapter.WebMvcConfigurerAdapter定义些空方法用来重写项目需要用到的WebMvcConfigure实现.具 ...
- ASP.NET Core的配置(1):读取配置信息
提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...
- SQL2005SP4补丁安装时错误: -2146233087 MSDTC 无法读取配置信息。。。错误代码1603的解决办法
是在安装slq2005sp3和sp4补丁的时候碰到的问题. 起先是碰到的错误1603的问题,但网上搜索的1603的解决办法都试过了,google也用了,外文论坛也读了,依然没有能解决这个问题. 其实一 ...
- JavaWEB中读取配置信息
第一种方法是使用java.io和java.util包,缺点是路径的概念要清晰, 例子: Properties prop = new Properties(); InputStream in = get ...
- NameValueCollection类读取配置信息
C#中的NameValueCollection类读取配置信息,大家可以参考下. 我首先介绍配置文件中的写法: 1.在VS2015中的工程下建立一个控制台应用程序,其config文件默认名称为App ...
- SpringBoot入门 (二) 属性文件读取
在上一篇中介绍了在idea中创建springboot工程及使用web工程输出“helloworld”到前端页面,本文学习在springboot工程中读取属性文件中的属性值. 一 自定义属性 在appl ...
- springboot读取配置信息、环境变量
2.读取配置文件 2.1 读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法 ...
- SpringBoot入门 (三) 日志配置
上一篇博文记录了再springboot项目中读取属性文件中配置的属性,本文学习在springboot项目中记录日志. 日志记录在项目中是很常见的一个功能了,对排查问题有很大帮助,也可以做分类分析及统计 ...
随机推荐
- 10. leetcode 226 Invert Binary Tree
思路:递归.先将左子树反转,再将右子树反转,然后让root->left指向反转后的右子树,root->right指向反转后的左子树.
- 简单探讨python中的语句和语法
python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...
- 王佩丰第2讲-excel单元格格式设置 笔记
点小箭头都可以进入单元格格式设置 跨越合并 添加斜线 回车 ALT+ENTER 格式刷 数字格式 特定红色 货币VS会计专用 日期 2是1月2号,3是1月3号-- 自定义[例子中是在数值后面加&quo ...
- [js高手之路] vue系列教程 - 组件定义与使用上部(7)
组件是vue框架比较核心的内容,那么什么是组件呢? 通俗点讲:组件是由一堆html, css, javascript组成的代码片段, 作用是为了实现模块的重用 组件的基本用法: <div id= ...
- 移动端JS判断手势方向
原生JS判断手势方向的解决思路: 1.滑动屏幕事件使用html5 的touchstart滑动开始事件和touchend滑动结束事件. 2.方向的判断,以起点做平面坐标系,与终点连线做直线,直线与x正半 ...
- WTL--SDI框架分析
创建SDI产生的基本类:CMainFrame,CAboutDlg和CWTLView(WTL为项目名). 由此可见,不同于MFC,WTL少了文档类,它的结构就只有简单的窗口类和视图类,而至于串行化(MF ...
- webpack2+node+react+babel实现热加载(hmr)
前端工程化开发的一个重要标志就是热替换技术,它大大的提高开发效率,使我们专注于写代码,webpack2中的热替换相比较1更加简洁. 1. 先看效果 2.目录结构 3.项目目录结构文件描述 bin 执行 ...
- SpringMVC过程中@RequestBody接收Json的问题 总是报415
在SpringMVC中用@RequestBody接收Json的问题,总是报415,经过一翻查找 前台js的post: var postdata = '{"title":" ...
- shell中while循环的陷阱
在写while循环的时候,发现了一个问题,在while循环内部对变量赋值.定义变量.数组定义等等环境,在循环外面失效. 一个简单的测试脚本如下: #!/bin/bash echo "abc ...
- Linux 修改用户名
0.使用root用户登录进行操作 1.删除用户相关进程 ps -ef | grep zheng236 2. 修改用户登录名 usermod zheng236 -l zheng 3.修改用户家目录 mv ...