一、创建一个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
形式,
用法例子:
3.2 application.yml 类型#
把上面 properties 格式改成 yml 格式:
比如对于一个数组,可以这样写:
还可以这样写:
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 位字符串 |
配置例子:
四、配置文件加载顺序#
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:
通过使用注解 @Value("${属性名称}")
来将配置文件里面的值注入到程序属性中。
7.2 通过 @ConfigurationProperties 注解读取#
7.2.1 @ConfigurationProperties 读取配置值#
@ConfigurationProperties:将配置文件中的相关配置和类里面的属性进行绑定。
它里面有一个参数,当然这个参数也可以不填,语法如下:
上面的 application.yml 里值也可以用如下程序来读取:
- 来一个比较复杂点例子:
application.yml 文件:
读取配置文件:
上面的也可以用 @Value 读取,程序跟前面例子一样。
7.2.2 @Value 和 @ConfigurationProperties 区别#
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个个指定属性 |
松散绑定 | 支持 | 不支持 |
SPEL(计算式) | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型 | 支持 | 不支持 |
7.3 @PropertySource 加载指定配置文件#
@PropertySource("email-config.properties"),加载 email-config.properties
配置文件。
同理也可以加载 .yml 的文件。
email-config.properties:
读取配置文件值: