

SpringBoot 配置文件使用详解 - 九卷
source link: https://www.cnblogs.com/jiujuan/p/16700983.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、创建一个SpringBoot项目#
创建 SprintBoot 项目的 2 种方式:
- 在 https://start.spring.io/ 上创建一个 SpringBoot 项目,然后导入到 IDEA 里。
- 直接在 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
作为默认配置文件。
- file:./config/
- file:./config/*/
- file:./
- classpath:/config/
- classpath:/
加载顺序依次从上到下,所有文件都会加载,高优先级的内容会覆盖低优先级的内容。
五、其它形式配置#
5.1 其它形式配置#
其实上面已经有使用到,比如读取命令行参数信息到配置文件里。这里的命令行参数也是一种动态配置信息。
其它常用配置形式:
- 系统环境变量:在 linux 中经常用到这个。
- 命令行参数:启动应用时常常会配置的运行参数。
- Java 系统属性:通过 System.getProperties() 获取的。
- 一些注解设置的属性文件,比如 @PropertySource 设置的属性文件
- 启动类 SpringApplication.setDefaultProperties 设置的默认属性
5.2 加载顺序怎样#
- 命令行参数
- Java 系统属性
- 系统环境变量
- 含有 random.* 值的属性
- application-{profile}.{properties|yml}
- application.{properties|yml}
- 注解 @PropertySource 设置的属性文件
- 启动类 SpringApplication.setDefaultProperties 设置的默认属性
加载顺序依次从上到下。
六、配置信息作用#
-
数据库连接信息保存
-
项目的启动信息,比如 test,dev,prod 环境,端口信息等
-
一些自定义配置信息,比如文件上传地址,调用第三方 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 = [email protected]
email.to = [email protected]
读取配置文件值:
@Component
@PropertySource("email-config.properties")
@ConfigurationProperties(prefix = "email")
public class EmailConfig {
private String name;
private String to;
private String from;
}
八、参考#
Recommend
-
6
About在《天书九卷》,你将看到一个全新的仙侠世界:全方位自由视角,强大3D战斗画面,华丽风情场景布局、炫酷百变妖灵宠物、震撼激烈打斗节奏,带给你最爽快最逼真的游戏体验!乱世、冒险、阴谋、人与妖灵的共存或决裂,...
-
5
SpringBoot中的配置文件详解(yml、properties全局配置和自定义配置、有趣的banner图配置) 推荐 原创
-
10
Golang 汇编asm语言基础学习 一、CPU 基础知识# cpu 内部结构
-
4
聊一聊向上管理 一、先看看向下管理# 在平时大家日常工作中,遇到最多的情况其实是领导向下管理。 也就是领导会分配工作任务,...
-
11
一、什么是java反射# 什么是 java 的反射? 说到反射,写这篇文章时,我突然想到了人的”反省“,反省是什么?吾一日三省吾身,一般就是...
-
9
一、使用微服务的四大门派# 2.1、跟风派
-
12
Go 中 time.After 可能导致的内存泄露 一、Time 包中定时器函数# go v1.20.4 定...
-
5
一、Elasticsearch介绍# Elasticsearch介绍
-
5
一、程序员不善言词 在大家的印象中,程序员好像是一群不善言词的理工男。为什么大家会有这种刻板的印象呢? 因为程序员的工作,只需要一台电脑,一根网线,就可以开始工作了。好像不需要与人打交道。一段进入到工作状态,编...
-
2
环境:SpringBoot2.7.16 + Vault1.15.5(Vault服务版本)SpringBoot作为流行的Java微服务框架,其配置文件可能包含数据库密码、API密钥等敏感数据。为了保障这些信息的安全,Vault作为一个开源的秘密管理工具,成为了众多开发者的选择。本文将深入探讨如何整合S...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK