Spring Boot 配置文件
前面的文章已经介绍了 Spring Boot 项目的创建,上文,本文介绍 Spring Boot 的简单进阶使用。
配置文件的作用
项目中的所有重要数据都是在配置文件中配置的,例如:
- 数据库的连接信息(包括数据库的密码和用户名以及一些参数的设置);
- 项目的启动端口,比如想要以 8081 作为端口运行项目;
- 一些第三方的系统调用信息;
- ⽤于发现和定位问题的普通⽇志和异常⽇志等;
配置文件的格式
有两种
- .properties:以键值对的形式配置,key 和 value 之间是以“=”连接;
- .yml:语法和 JSON 语⾔类似,写法简单,可读性高;
下面通过举例来进行具体说明。
注意:
项目中两种形式可以共同存在,但 .properties 的优先级更高,即出现相同配置的话,例如配置端口号,会以 .properties 配置的端口号为准。加载完 .properties 配置文件后也会加载 .yml 配置文件。
实际业务中会采取一种统一的配置文件格式,这样一来可以更好的维护以及开发。
.properties
Spring Boot 项目创建完成后,会自动在 resources 包下面加载。
下面进行配置:
spring.application.name=demo
# 配置项目端口号
server.port=8080
# 连接数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jdbc?characterEncoding= utf8
spring.datasource.username=root
spring.datasource.password=z0329
上述用 .properties 格式配置数据库、端口号,使得该项目可以与数据库进行关联,对其进行操作。
除上述配置外,还可以根据业务配置其它相关项。
读取配置文件
在项目中,还提供了读取配置文件内容的注解(@Value 注解)
使用方法如下:
@RestController
@RequestMapping("/t")
public class TestController {@Value("${server.port}")private String port;@PostConstruct // @PostConstruct注解的方法将会在依赖注入完成后被自动调用. @PostConstruct修饰的方法只会被服务器执行一次public void postConstruct(){System.out.println("读取配置文件中的端口号: " + port);}}
结果如下:
注意:
.yml
yml 是树形结构的配置⽂件,语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒号加空格的⽅式组成的,其中的空格不可省略。
用法如下:
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/jdbc?characterEncoding=utf8username: rootpassword: z0329server:port: 8088
yml 读取配置文件的方法也是通过使用 @Value 注解,与上述.properties 一样,结果如下:
当两个配置文件同时存在时:
端口号就是以 .properties 配置文件为准,其优先级更高。
value 值加单双引号区别
在 yml 中定义三个个字符串,如下:
编写测试类:
/*** Created with IntelliJ IDEA.* Description: 用于测试 @Value 注解* 作用:读取配置文件中的内容*/
@RestController
@RequestMapping("/t")
public class TestController {@Value("${server.port}")private String port;@PostConstruct // @PostConstruct注解的方法将会在依赖注入完成后被自动调用. @PostConstruct修饰的方法只会被服务器执行一次public void postConstruct(){System.out.println("读取配置文件中的端口号: " + port);}}
结果如下:
结论:
- 默认为字符串,不用加上单/双引号;
- 单引号会转义特殊字符,将特殊字符转义成一个普通的字符串;
- 双引号不会转义特殊字符,即特殊字符会作为本身进行输出
.properties 与 .yml
- properties 是以 key=value 形式配置的键值类型的配置⽂件, yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置.
- properties 配置文件内容较为冗余,例如连接数据库信息,都会以 spring.datasource 开头,而 yml 则不会,写法更简单,可读性高
- yml 支持更多的数据类型、通用性更好,支持多种语言。