写作时间:2018-12-22
Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA,

配置文件说明

Spring Boot 配置文件允许为同一套应用,为不同的环境用不同的配置文件。比如开发环境、测试环境、生成环境。你可以用properties 文件, YAML 文件, 环境变量 , 和 命令行参数 去定制配置文件. 属性可以通过注解 @Value 注入内容,结构化对象可以通过注解 @ConfigurationProperties 注入内容。配置文件英文关键词: Externalized Configuration .

Spring Boot 配置文件加载优先级如下:

  1. Devtools全局设置属性在路径 (~/.spring-boot-devtools.properties 当devtools激活的时候).
  2. 测试用例上的 @TestPropertySource .
  3. 测试用例上的 @SpringBootTest#properties注解.
  4. 命令行参数.
  5. 配置在SPRING_APPLICATION_JSON 的属性(环境变量或系统属性中内嵌的内联JSON).
  6. ServletConfig初始化参数.
  7. ServletContext 初始化参数.
  8. 配置在 java:comp/envJNDI(Java Naming and Directory Interface) 属性.
  9. Java系统属性 (System.getProperties()).
  10. 操作系统OS(Operating System)环境变量.
  11. RandomValuePropertySource 中的属性只包括在包random.*.
  12. 没有打进jar包的Profile-specific 应用属性 (application-{profile}.properties 和 YAML ).
  13. 打进jar包中的Profile-specific 应用属性 (application-{profile}.properties 和 YAML).
  14. 没有打进jar包的应用配置 (application.properties 和 YAML).
  15. 打进jar包中的应用配置(application.properties 和 YAML).
  16. @Configuration类上的@PropertySource注解 .
  17. 默认属性 (配置在文件 SpringApplication.setDefaultProperties).

本章记录最常用的配置文件application.propertiesYAML

配置文件位置读取优先级

application.properties 或者 application.yml 读取优先级如下:

  1. file:./config/当前位置的子目录/config
  2. file:./当前位置
  3. classpath:/config/classpath /config 的包中
  4. classpath:/classpath的根目录

Properties文件中的占位符

Placeholders占位符,实际上是可以被后面的属性运用的变量。
通过{占位符}来替换掉里面对象的内容。比如下面app.description=MyApp is a Spring Boot Application

app.name=MyApp
app.description=${app.name} is a Spring Boot application

用YAML代替 Properties

YAML是JSON的超集,可以分层来定义数据. SpringApplication 类自动支持 YAML 替换 propertiesclasspath加载了类库SnakeYAML.
spring-boot-starter自动加载了类库SnakeYAML

  1. YAML分层的例子:
environments:dev:url: http://dev.example.comname: Developer Setupprod:url: http://another.example.comname: My Cool App

等价于properties

environments.dev.url=http://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=http://another.example.com
environments.prod.name=My Cool App
  1. YAML配置list的例子,
my:
servers:- dev.example.com- another.example.com

等价于properties,数组list带了[index]

my.servers[0]=dev.example.com
my.servers[1]=another.example.com

加载YAML

Spring Framework 提供了两个方便的方法加载YAML文件. YamlPropertiesFactoryBean 加载 YAML 当做 Properties,YamlMapFactoryBean 加载 YAML 当做a Map.

自定义属性

参照教程【SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程】新建一个Spring Boot项目,名字叫democonfig, 在目录src/main/java/resources 下找到配置文件application.properties,重命名为application.yml
定义属性如下:

account:name: zgpeaceage: 18number: ${random.int}uuid: ${random.uuid}max: ${random.int(10)}value: ${random.value}greeting: hi, I'm ${my.name}

其中配置文件中用到了${random} ,它可以用来生成各种不同类型的随机值。
读取配置文件里面的内容,在属性上用注解@Value("${属性名}")
新建类com.zgpeace.democonfig.MineController.java, 实现如下:

package com.zgpeace.democonfig;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MineController {@Value("${account.name}")private String name;@Value("${account.age}")private int age;@RequestMapping(value = "/author")public String mine() {return name+ ": " + age;}
}

启动应用,命令行访问结果如下:

$ curl http://localhost:8080/author
zgpeace: 18

将配置文件的属性赋给实体类

配置文件的字段可以赋值给JavaBean, 结构化对象可以通过注解 @ConfigurationProperties 注入内容,创建类com.zgpeace.democonfig.bean.ConfigBean, 实现如下:

package com.zgpeace.democonfig.bean;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "account")
@Component
public class ConfigBean {private String name;private int age;private int number;private String uuid;private int max;private String value;private String greeting;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public String getUuid() {return uuid;}public void setUuid(String uuid) {this.uuid = uuid;}public int getMax() {return max;}public void setMax(int max) {this.max = max;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}public String getGreeting() {return greeting;}public void setGreeting(String greeting) {this.greeting = greeting;}
}

实现类com.zgpeace.democonfig.MineController修改为:

package com.zgpeace.democonfig;import com.zgpeace.democonfig.bean.ConfigBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@EnableConfigurationProperties({ConfigBean.class})
public class MineController {@AutowiredConfigBean configBean;@Value("${account.name}")private String name;@Value("${account.age}")private int age;@RequestMapping(value = "/author")public String mine() {return name+ ": " + age;}@RequestMapping(value = "/lucy")public String person() {return configBean.getGreeting() + " >>>" + configBean.getName() + " >>>" +configBean.getUuid() + " >>>" + configBean.getMax();}
}

启动应用,在命令行访问:

$ curl http://localhost:8080/lucy
hi, I'm ${my.name} >>>zgpeace >>>86cc4c39-8715-46ef-9e9f-497a2c6fac22 >>>8

自定义配置文件

上面介绍的文件是放在properties.yml中,现在定义一个自己的文件
specific.properties, 内容如下:

com.zgpeace.hobby=run marathon
com.zgpeace.fruit=orange

赋值给JavaBean,需要三个注解

  1. @Configuration
  2. @PropertySource(value = “classpath:specific.properties”)
  3. @ConfigurationProperties(prefix = “com.zgpeace”)
    新建类com.zgpeace.democonfig.bean.User,
package com.zgpeace.democonfig.bean;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;@Configuration
@PropertySource(value = "classpath:specific.properties")
@ConfigurationProperties(prefix = "com.zgpeace")
public class User {private String hobby;private String fruit;public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}public String getFruit() {return fruit;}public void setFruit(String fruit) {this.fruit = fruit;}
}

运行程序,在命令行测试:

$ curl http://localhost:8080/user
hobby: run marathon ; fruit: orange

多个环境配置文件

除了application.properties 或者 application.yml外,可以自定义环境配置文件的格式为application-{profile}.properties。环境有默认的定制配置文件application-default.properties,默认会加载。但是用户定制的文件会覆盖掉默认的文件。
比如开发环境、测试环境、生成环境定义三个配置文件

  1. application-test.properties:测试环境
server:port: 8082
  1. application-dev.properties:开发环境
server:port: 8086
  1. application-prod.properties:生产环境
server:port: 8088

Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只在特定的环境下生效。启用方式为设置application.yml 中设置profile: active :

spring:profiles:active: dev

启动应用,发现程序的端口不再是8080,而是8082。

代码地址

https://github.com/zgpeace/Spring-Boot2.1/tree/master/democonfig

参考

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
https://blog.csdn.net/forezp/article/details/70437576

易筋SpringBoot2.1 | 第二篇:Spring Boot配置文件详解相关推荐

  1. Spring Boot 配置文件详解

    2019独角兽企业重金招聘Python工程师标准>>> 第二篇 : Spring Boot配置文件详解 文章首发于微信公众号<程序员果果> 地址:https://mp.w ...

  2. spring boot配置文件详解

    spring boot配置文件详解 application.properties是spring-boot的核心配置文件,这个配置文件基本可以取代我们ssm或者ssh里面的所有的xml配置文件. 当我们 ...

  3. 全面的Spring Boot配置文件详解

    全面的Spring Boot配置文件详解 Spring Boot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍.Spring Boot配置文件对Spring Boot来说就是入门 ...

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

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

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

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

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

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

  7. Spring Boot第二篇:Spring Boot配置文件详解

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

  8. 企业级 SpringBoot 教程 (二)Spring Boot配置文件详解

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

  9. 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解

    <深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...

  10. Spring Boot 单元测试详解+实战教程

    转载自   Spring Boot 单元测试详解+实战教程 Spring Boot 的测试类库 Spring Boot 提供了许多实用工具和注解来帮助测试应用程序,主要包括以下两个模块. spring ...

最新文章

  1. java学习总结:3
  2. php 存储型跨站,php云人才系统存储型跨站两处
  3. 在RichTextEditor组件中使用自定义右键。
  4. 015 已接任务链表和任务库二叉树遍历
  5. 【报告分享】中国人工智能厂商全景报告.pdf(附下载链接)
  6. Win11如何设置滚动条 Win11滚动条设置教程
  7. C语言小算法:ACSII码(多字节)和Unicode(宽字节)互转
  8. 4月23 nuTonomy的语义层(人行横道,人行道,交通信号灯,停车线,车道等)的扩展包
  9. JUC与JVM并发编程学习笔记02
  10. color是css3新增属性吗,CSS进阶篇--你用过css3的这个currentColor新属性吗?使用与兼容性...
  11. 车辆OTA仿真测试解决方案
  12. Python学习笔记——python基础 2. 高级变量类型(列表、元祖、字典)
  13. 请画出使用mapreduce对英文句子_微信英文培训:50句出国旅行英语
  14. lzx和网页之间脚本交互调试方式
  15. 区块链的命和血汗工厂的病
  16. [存档]Martin Fowler在UMLChina交流实录
  17. 【量化交易】永久投资组合,海龟交易法则阅读,回测与讨论
  18. 单片机毕业设计 stm32智能路灯设计与实现
  19. uniapp生态UI框架选择之uView(@莫成尘)
  20. 青云算法面试题干货-开密码锁-LeetCode第752题

热门文章

  1. echart legends换行固定数量显示
  2. 在Winform开发框架中实现对数据库的加密支持
  3. JAVA的序列化不得不说的事
  4. 豪华版飞机大战系列(三)
  5. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
  6. CSS3 动画、变形效果
  7. centos6.5 下搭建lamp环境
  8. C和指针 (pointers on C)——第十章:结构体和联合(上)
  9. 关于oracle数据库高版本向低版本迁移的解决方法
  10. Iphone 开发常用代码