一、创建一个SpringBoot项目

创建 SprintBoot 项目的 2 种方式:

  1. https://start.spring.io/ 上创建一个 SpringBoot 项目,然后导入到 IDEA 里。
  2. 直接在 IDEA 上创建 SpringBoot 项目, File->New->Project, Sprint Initializr,填上相关信息。

我直接在 https://start.spring.io/ 生成一个项目然后下载下来,导入 IDEA 里。

把下载的文件解压放在 SpringBootConfigDemos 文件夹下:

二、配置文件类型

在上一小节的图中可以看到,在 src/main/resources 目录下的 application.properties 文件,这个就是创建的默认全局配置文件

这是一种文件类型,以 .properties 后缀结尾。

还有一种以 .yml 后缀结尾的 YAML 文件类型 - application.yml/application.yaml

YAML 是比 properties 格式更年轻,在云原生里用的很多这种配置格式。

三、配置文件语法格式

3.1 application.properties 类型

properties 在 java 里属于比较常见的配置文件类型,语法格式: key=valve 形式,

key=value

用法例子:

server.port = 80
server.ip = 127.0.0.1 app.property.key = proname
app.property.name = tom
app.list = 1,2,3 # 还有这样语法
# 把启动命令时加入: --spring.profiles.active=dev
spring.profiles.active = ${spring.profiles.active} # 读取启动命令参数 # 属性占位符:使用${var}语法引用已经定义的属性的值
app.desc = your name is ${app.property.name}

3.2 application.yml 类型

把上面 properties 格式改成 yml 格式:

server:
port: 80
ip: 127.0.0.1 app:
property:
key: proname
name: tom
list: [1,2,3]
desc: your name is ${app.property.name} spring:
profiles:
active: ${spring.profiles.active}

比如对于一个数组,可以这样写:

person:
hobby:
- 篮球
- 跑步
- 读书

还可以这样写:

person:
hobby: [篮球, 跑步, 读书]

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

YAML 入门教程:

说明:YAML 格式是大小写敏感的。key: value 表示键值对关系,冒号后面必须加一个空格

3.3 配置随机值

SpringBoot 内部提供了一个 random.* 属性,专门用于生成随机值。

属性 描述
random.int 随机产生正负的整数
random.int(max) 随机产生 [0, max) 区间的整数
random.int(min,max) 随机产生 [min, max) 区间的整数
random.long 随机产生正负的长整数
random.long(max) 随机产生 [0, max) 区间的长整数
random.long(min,max) 随机产生 [min, max) 区间的长整数
random.uuid 产生 UUID 字符串(含‘-‘字符)
random.* ‘*’表示除上面列举之外的其他字符,用于随机产生 32 位字符串

配置例子:

int-val=${random.int}
int-range-val=${random.int(2)}
uuid-val=${random.uuid}

四、配置文件加载顺序

SpringBoot 启动时会加载以下位置的 application.properties 或者 application.yml 作为默认配置文件。

  1. file:./config/
  2. file:./config/*/
  3. file:./
  4. classpath:/config/
  5. classpath:/

加载顺序依次从上到下,所有文件都会加载,高优先级的内容会覆盖低优先级的内容。

五、其它形式配置

5.1 其它形式配置

其实上面已经有使用到,比如读取命令行参数信息到配置文件里。这里的命令行参数也是一种动态配置信息。

其它常用配置形式:

  1. 系统环境变量:在 linux 中经常用到这个。
  2. 命令行参数:启动应用时常常会配置的运行参数。
  3. Java 系统属性:通过 System.getProperties() 获取的。
  4. 一些注解设置的属性文件,比如 @PropertySource 设置的属性文件
  5. 启动类 SpringApplication.setDefaultProperties 设置的默认属性

5.2 加载顺序怎样

  1. 命令行参数
  2. Java 系统属性
  3. 系统环境变量
  4. 含有 random.* 值的属性
  5. application-{profile}.{properties|yml}
  6. application.{properties|yml}
  7. 注解 @PropertySource 设置的属性文件
  8. 启动类 SpringApplication.setDefaultProperties 设置的默认属性

加载顺序依次从上到下。

六、配置信息作用

  1. 数据库连接信息保存

  2. 项目的启动信息,比如 test,dev,prod 环境,端口信息等

  3. 一些自定义配置信息,比如文件上传地址,调用第三方 url 地址、uid、密匙信息等

等等。

七:读取配置文件

7.0 绑定配置的一些规则

SpringBoot 对 *.properties*.yml 文件中配置的属性名称,它提供了一些绑定规则,它不要求配置的属性名称完全与 Bean 中的属性名称相同。它支持以下几种规则的命名方式:

属性 描述
firstName 标准的驼峰式命名
first-name 单词之间通过‘-‘分隔,Spring Boot 推荐这种
first_name 单词之间通过‘_’分隔
FIRST_NAME 单词全部大写并通过‘_’分隔,在使用系统环境变量时,推荐这种

7.1 通过 @Value 注解读取

application.yml:

server:
port: 80
ip: 127.0.0.1

通过使用注解 @Value("${属性名称}") 来将配置文件里面的值注入到程序属性中。

@Component
public class ServerConfig { @Value("${server.port}")
public String Port; @Value("${$server.ip}")
public String IP;
}

7.2 通过 @ConfigurationProperties 注解读取

7.2.1 @ConfigurationProperties 读取配置值

@ConfigurationProperties:将配置文件中的相关配置和类里面的属性进行绑定。

它里面有一个参数,当然这个参数也可以不填,语法如下:

@ConfigurationProperties(prefix = "xxx")

上面的 application.yml 里值也可以用如下程序来读取:

@Component
@ConfigurationProperties(prefix = "server")
public class ServerConfig { public String port; public String ip;
}
  • 来一个比较复杂点例子:

application.yml 文件:

server:
port: 80
ip: 127.0.0.1
list-server:
- BJ-Server
- GZ-Server
map-server: {bj-server: 192.168.0.2, gz-server: 192.168.0.3}
dns:
bj: bj.dns.one
gz: gz.dns.two
arr-port: 8081, 8082

读取配置文件:

@Component
@ConfigurationProperties(prefix = "server")
public class ServerConfig { public String port;
public String ip;
private List<String> listServer;
private Map<String, String> mapServer;
private int[] arrPort; private Dns dns; public static class Dns {
private String bj;
private String gz;
}
}

上面的也可以用 @Value 读取,程序跟前面例子一样。

7.2.2 @Value 和 @ConfigurationProperties 区别

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定属性
松散绑定 支持 不支持
SPEL(计算式) 不支持 支持
JSR303数据校验 支持 不支持
复杂类型 支持 不支持

7.3 @PropertySource 加载指定配置文件

@PropertySource("email-config.properties"),加载 email-config.properties 配置文件。

同理也可以加载 .yml 的文件。

email-config.properties:

email.name = jimmy
email.from = 123@test.com
email.to = 567@yeah.com

读取配置文件值:

@Component
@PropertySource("email-config.properties")
@ConfigurationProperties(prefix = "email")
public class EmailConfig {
private String name;
private String to;
private String from;
}

八、参考

SpringBoot 配置文件使用详解的更多相关文章

  1. SpringBoot之DispatcherServlet详解及源码解析

    在使用SpringBoot之后,我们表面上已经无法直接看到DispatcherServlet的使用了.本篇文章,带大家从最初DispatcherServlet的使用开始到SpringBoot源码中Di ...

  2. SpringBoot Profile使用详解及配置源码解析

    在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...

  3. Springboot mini - Solon详解(二)- Solon的核心

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  4. Springboot mini - Solon详解(三)- Solon的web开发

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  5. Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  6. Nginx 主配置文件参数详解

    Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...

  7. CentOS网络接口配置文件ifcfg-eth详解

    ======CentOS网络接口配置文件ifcfg-eth详解====== 文件 /etc/sysconfig/network-scripts/ifcfg-eth0在/etc/sysconfig/ne ...

  8. Apache2 httpd.conf配置文件中文版详解

    Apache2 httpd.conf配置文件中文版详解## 基于 NCSA 服务的配置文件.##这是Apache服务器主要配置文件.#它包含服务器的影响服务器运行的配置指令.#参见以取得关于这些指令的 ...

  9. ssh2的application.xml配置文件配置详解

    ssh2的application.xml配置文件配置详解   1.导入其他的配置文件.在ssh项目中可以导入其他的配置文件,导入的格式为: <import resource="clas ...

随机推荐

  1. React技巧之导入组件

    正文从这开始~ 总览 在React中,从其他文件中导入组件: 从A文件中导出组件.比如说,export function Button() {} . 在B文件中导入组件.比如说,import {But ...

  2. 更强的 JsonPath 兼容性及性能测试之2022版(Snack3,Fastjson2,jayway.jsonpath)

    2022年了,重新做了一份json path的兼容性与性能测试.三个市面上流行框架比较性测试. 免责声明:可能测试得方式不对而造成不科学的结果(另外,机器不同结果会有不同),可以留言指出来.以下测试数 ...

  3. Neural Networks

    神经网络能够使用torch.nn包构建神经网络. 现在你已经对autogard有了初步的了解,nn基于autograd来定义模型并进行微分.一个nn.Module包含层,和一个forward(inpu ...

  4. labview入门到出家10(进阶)——CAN通讯

    ​          讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...

  5. final关键字用于修饰局部变量和修饰成员变量

    修饰变量 1. 局部变量--基本类型 基本类型的局部变量,被fifinal修饰后,只能赋值一次,不能再更改.代码如下: public class FinalDemo1 { public static ...

  6. Effective C++阅读笔记 较详细 复杂条款带样例

    一.让自己习惯C++ 条款01:视C++为一个语言联邦 C++可视为: C:以C为基础. 面向对象的C++:添加面向对象特性. 模板C++:泛型编程概念,使用模板. STL:使用STL的容器.迭代器. ...

  7. .net webapi 实现 接口版本控制并打通swagger支持

    我们在开发 webapi 项目时如果遇到 api 接口需要同时支持多个版本的时候,比如接口修改了入参之后但是又希望支持老版本的前端(这里的前端可能是网页,可能是app,小程序 等等)进行调用,这种情况 ...

  8. HMS Core安全检测服务如何帮助大学新生防范电信诈骗?

    一年一度的高考结束了,很多学生即将离开父母,一个人踏入大学生活,但由于人生阅历较少,容易被不法分子盯上. 每年开学季也是大一新生遭受诈骗的高峰期,以下是一些常见的案例.有的骗子会让新生下载注册一些恶意 ...

  9. webapi <Message>已拒绝为此请求授权。</Message>

    webapi <Message>已拒绝为此请求授权.</Message> 原有的调用base.OnAuthorization(actionContext); 换成下面这个 // ...

  10. Note -「数论 定理及结论整合」

    数学素养 low,表达可能存在不严谨,见谅.我准备慢慢补上证明? Theorems. 裴蜀定理:关于 \(x, y\) 的线性方程 \(ax + by = c\) 有解,当且仅当 \(\gcd (a, ...