SpringBoot 配置文件
1. SpringBoot 配置文件
SpringBoot 支持并定义了配置文件的格式,规范了其他框架集成到 SpringBoot,项目或者框架的配置信息大多放在配置文件中,如:项目的启动端口、数据库的连接信息、第三方系统的调用密钥等信息、用于发现和定位问题的普通日志和异常日志等

2. 配置文件入手
项目的启动端口
SpringBoot 内置了 Tomcat 服务器,默认端口号是 8080 ,我们可以通过配置文件来修改服务的端口号
SpringBoot 在创建项目时,就已经帮我们创建了配置文件


修改 application.properties 文件
java
server.port=9090
运行程序,观察日志,显示 Tomcat 启动端口号为 9090

访问程序:[http://127.0.0.1:9090/login.html](http://127.0.0.1:9090/login.html)

3. 配置文件的格式
SpringBoot 配置文件有三种格式:
(1)application.properties
(2)application.yml
(3)application.yaml
yml 是 yaml 的简写,yaml 和 yml 的格式一样。
当程序启动时,SpringBoot 会自动从 classpath 路径找到并加载 application.properties、application.yaml、application.yml 文件,也可也通过 Spring.config.name 指定文件路径和名称。

properties 类型的配置文件就时老版本配置文件,创建 Spring Boot 项目时默认的文件格式,yml 类型的配置文件就是新版本文件。
properties 和 yml 可以同时在一个项目中,当 properties 和 yml 并存时,两个配置文件都会加载,如果配置文件内容有冲突,则以 properties 为主,也就是 properties 优先级更高
4. properties 配置文件
properties 配置文件是最早期的配置文件,也是创建 SpringBoot 项目默认的配置文件
4.1 properties 基本语法
properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,配置文件中使用 "#" 来添加注释信息
java
#配置端口号
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 注解使用 "${}" 的格式读取
properties 配置
java
my.key=hello
java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/prop")
public class ReadPropertiesController {
@Value("${my.key}")
private String myKey;
@RequestMapping("/read")
public String read() {
return "myKey:" + myKey;
}
}
运行结果:http://127.0.0.1:8080/prop/read

4.3 properties 缺点
properties 配置是以 key-value 的形式配置的

从 key 上来看,properties 配置文件中会有很多的冗余信息

5. yml 配置文件
yml 是 yaml 的缩写,全称:Yet Another Markup Language(另一种标记语言)。
5.1 yml 基本用法
yml 是树形结构的配置文件,它的基础语法是"key: value",key 和 value 之间使用英文冒号加空格的方式组成,空格不可以省略
java
key: jave
高亮的 key 是正确的

使用 yml 连接数据库
java
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
username: root
password: root
yml 和 properties


5.2 yml 配置文件
yml 读取配置的方式和 properties 相同,使用 @Value 注解即可
yml 配置
java
string:
hello: yml
java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/yml")
public class ReadYmlController {
@Value("${string.hello}")
private String hello;
@RequestMapping("/ymlKey")
private String key() {
return "读取到值:" + hello;
}
}
运行结果:http://127.0.0.1:8080/yml/ymlKey

5.2.1 value 值加单双引号
字符串默认不用加上单双引号,加上英文单双引号可以表示特殊的含义
yml 配置
java
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/yml")
public class ReadYmlController {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@RequestMapping("/yml")
public String readYml() {
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
return "yml";
}
}
运行结果:

(1)字符串默认不用加上单引号或者双引号
(2)单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串
(3)双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义
5.2.2 配置对象
yml 中配置对象
java
student:
id: 1
name: Java
age: 18
行内写法
java
student: {id: 1,name: Java,age: 18}
使用 @ConfigurationProperties 注解来读取
java
package com.example.demo.entity;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private int id;
private String name;
private int age;
}
调用类
java
package com.example.demo.controller;
import com.example.demo.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class StudentController {
@Autowired
private Student student;
@RequestMapping("/readStudent")
public String readStudent() {
return student.toString();
}
}
运行结果:http://127.0.0.1:8080/readStudent

5.2.3 配置集合
配置文件也可也配置 list 集合
java
dbtypes:
name:
- zhangsan
- lisi
- wangwu
集合的读取也是使用 @ConfigurationProperties
java
package com.example.demo.entity;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.List;
@Data
@Configuration
@ConfigurationProperties(prefix = "dbtypes")
public class DataTypes {
List<String> name;
}
java
package com.example.demo.controller;
import com.example.demo.entity.DataTypes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/yml")
public class ReadYmlController {
@Autowired
private DataTypes dataTypes;
@RequestMapping("read")
public String read() {
return dataTypes.toString();
}
}
运行代码:http://127.0.0.1:8080/yml/read

5.2.4 配置 Map
配置文件也可以配置 map
java
maptypes:
map:
k1: kk1
k2: kk2
k3: kk3
java
package com.example.demo.entity;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Data
@Component
@ConfigurationProperties(prefix = "maptypes")
public class MapConfig {
private HashMap<String,String> map;
}
java
package com.example.demo.controller;
import com.example.demo.entity.MapConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/yml")
public class ReadYmlController {
@Autowired
private MapConfig mapConfig;
@RequestMapping("/read")
public String read() {
return mapConfig.toString();
}
}
运行结果:http://127.0.0.1:8080/yml/read

5.3 yml 优缺点
优点
(1)可读性高,写法简单,易于理解
(2)支持更多的数据类型
(3)支持更多的编程语言
缺点
(1)不适合写复杂的配置文件
(2)对格式有较强的要求