本文从配置文件的作用、快速入手,到properties与yml的语法、读取方式,最后通过一个验证码案例进行综合实践
目录
一、配置文件的作用
二、配置文件快速入手
三、配置文件的格式
四、properties配置文件说明
4.1properties基本语法
4.2读取配置文件
4.3properties缺点分析
五、yml配置文件
5.1yml基本语法
5.2yml进阶使用
5.3yml优缺点
一、配置文件的作用
配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。
SpringBoot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringleBoot的目的。很多项目或者框架的配置信息也放在配置文件中,比如:
项目的启动端口、数据库的连接信息(用户名、密码等设置)、日志等
项目的启动端口:SpringBoot内置了Tomcat服务器,默认端口号是8080,但是用户电脑上8080端口号有可能就被其他应用程序占用了,所以SpringBoot需要支持让用户自定义端口号。
数据库连接信息:为了更方便地简单地访问数据库,出现了一些持久层框架,其实就是对JDBC进行了更胜层次地封装,让用户通过简单几行代码可完成数据库的访问。但是不同的应用程序访问的数据库不同,这些持久层框架就需要支持用户可以自定义配置数据库的连接信息。
二、配置文件快速入手
修改application.properties文件:
重新运行程序,观察日志:
显示Tomcat启动端口号为9090。
三、配置文件的格式
SpringBoot配置文件有以下三种方式:
application.properties、application.yml、application.yaml
yml为yaml的简写,本文只讲yml文件的使用
当程序启动时,SpringBoot会自动从classpath路径找到并加载application.properties和application.yml文件。
注意:理论上.properties和.yml可以并存在于一个项目中,当.properties和.yml并存时,两个配置都会加载。如果配置文件内容有所冲突,则以.properties为主,也就是.properties优先级高。
四、properties配置文件说明
4.1properties基本语法
properties是以键值对的形式配置的,key和value之间以=连接
# 配置项目端口号
server.port=8080
# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
4.2读取配置文件
如果在项目中,想要主动地读取配置文件中的内容可以使用@Value注解来实现。@Value注解使用${ }的格式读取,如下代码所示:
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class PropertiesController { @Value("${mykey.key1}") private String key1; @RequestMapping("/key") public String key() { return "读取到值:" + key1; } }4.3properties缺点分析
properties配置是以key=value的形式配置的:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
properties配置文件中有很多冗余的信息,相比之下,yml配置文件就简单点
五、yml配置文件
5.1yml基本语法
yml是树形结构的配置文件,它的基础语法是key: value。key和value之间使用英文冒号+空格的方式组成,空格不可省略
# 正确的配置方式,冒号后面必须要有空格
key1: java
# 错误的配置方式
key2:java2
使用yml连接数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8&useSSL=false
username: root
password: root
5.2yml进阶使用
yml配置不同数据类型及null
# 字符串
string.value: Hello
# 布尔值,true 或 false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表 null
null.value: ~
# "" 空字符串
empty.value: ""
yml配置读取
string:
hello: bite
@RestController public class ReadYml { @Value("${string.hello}") private String hello; @RequestMapping("/ymlKey") public String key() { return "读取到值:" + hello; } }配置对象
student:
id: 1
name: Java
age: 18student: {id: 1, name: Java, age: 18}
此时需要使用@ConfigurationProperties来读取
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @ConfigurationProperties(prefix = "student") @Component @Data public class Student { private int id; private String name; private int age; }@RestController public class StudentController { @Autowired private Student student; @RequestMapping("/readStudent") public String readStudent() { return student.toString(); } }5.3yml优缺点
优点:可读性高,写法简单,易于理解
支持更多的数据类型,可以简单表达对象、数组、List、Map等数据形态
支持更多的编程语言
缺点:不适合写复杂的配置文件。比如prorperties格式:
keycloak.realm=demo
keycloak.resource=fm-cache-cloud
keycloak.credentials.secret=d4589683-0ce7-4982-bcd3
keycloak.security[0].authRoles[0]=user
keycloak.security[0].collections[0].name=ssologinurl
keycloak.security[0].collections[0].patterns[0]=/login/*
转换成yml:
keycloak:
realm: demo
resource: fm-cache-cloud
credentials:
secret: d4589683-0ce7-4982-bcd3
security:
- authRoles:
- user
collections:
- name: ssologinurl
patterns:
- /login/*
转换过程比较花费精力,可读性会变差