整个项目中所有重要的数据都是在配置文件中配置的:
由此可以发现 , 如果没有配置文件 , Spring Boot 项目就不能连接和操作数据库 , 甚至不能保存用于查询问题的关键日志.
Spring Boot 配置文件的主要分为以下两种格式:
.yml 和 properties 是两个时代的产物 , .yml 属于新时代的产物 , 创建 Spring Boot 时的配置文件默认格式是 properties , 如果用户指定要使用 .yml 就直接发给他.
Tips:
- 从功能上来讲 , 两个配置文件可以共存 , 但企业中通常会规定使用某一种格式的配置文件.(避免相同配置项被覆盖)
- 如果连个配置文件中有相同的配置项 , 以 properties 中的配置项优先.
properties 是旧时代的配置文件格式 , 也是 Spring Boot 默认的配置项.
properties 是以键值对的形式配置的 , key 和 value 之间以 = 连接. 例如:
#配置端口号
server.port=9090
#配置数据库连接
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
spring.datasource.username=root
spring.datasource.password=******
#用户自定义配置文件
username="zhangsan"
可以看到端口号已经被改了
Tips: 配置文件中以 # 来添加注释信息
在项目中可以使用 @Value 可以主动读取配置文件中的内容.
@Value 注解使用 “${}” 的格式读取 , 代码如下:
@Controller//当前类加载到 spring 容器中
@ResponseBody
public class testController {
@Value("${username}")//Tips: 一定是 ${key}格式
private String myconfigration;
//注册一个路由
@RequestMapping("/sayHi") // = @WebServlet("/url")
public String sayHi(){
return "Hello world!" + "->" + myconfigration;
}
}
运行结果:
Tips: @Value 和 @Autowried 执行方式很像 , 都是通过注入的方式.
properties 优点:
properties 缺点:
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
spring.datasource.username=root
spring.datasource.password=******
properties 有重复写很多的包名 , 而 yml 相同包名只需要写一次.
yml 是 YAML 是缩写 , 它的全称 Yet Another Markup Language (另一种标记语言)
yml 优点分析:
综上所述,YAML的通用性更强,可以满足不同场景下的数据序列化和交换需求,因此被广泛应用于配置文件、数据传输、API文档等领域。
yml 是树形结构的配置文件 , 基本语法是"key: value"(注意冒号后的空格不可省略)
#正确格式
string: mysql
#错误格式
string2:jdbc
可以看到 , 正确格式有高亮!
使用 yml 连接数据库
代码示例;
spring:
datasource:
url: 127.0.0.1:3306/dbname?character-Encoding=utf8
username: root
password: root
使用 properties 连接数据库:
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
spring.datasource.username=root
spring.datasource.password=******
明显 yml 要简洁不少.
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
Tips: 字符串默认不加单 / 双引号 , 如果加了会有不同含义.
string:
str1: hello \n spring boot
str2: 'hello \n spring boot'
str3: "hello \n spring boot"
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
// 初始化方法
@PostConstruct
public void doPostConstruct(){
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
运行结果如下:
双引号不会转义特殊字符的含义 , 特殊字符会表达本身的意思
student:
id: 1
name: 张三
age: 18
#或者是行内写法
student: {id: 1,name: 张三,age: 18}
@Value() 只能读取配置中的属性 , 而读取对象需要使用 @ConfigurationProperties()
具体实现如下:
@ConfigurationProperties("student")
@Component
@Setter
@Getter
@ToString
public class StudentComponent {
private int id;
private String name;
private int age;
}
Tips: Getter 和 Setter 不能省略 , 此处使用 lombok 插件用注解替代.
调用类的实现如下:
@Autowired
private StudentComponent studentComponent;
// 初始化方法
@PostConstruct
public void doPostConstruct(){
System.out.println(studentComponent);
}
执行结果如下:
yml 还可以配置集合类等 , 更多配置项可以访问 Spring Boot 官网
通常配置文件可以分为 公用, 开发, 测试, 生产.
假设产品有一个需求:
spring:
profiles:
active: dev
将运行环境设置为开发环境
#服务器端口号
serve:
port: 9090
#数据库 url
spring:
datasource:
url: jdbc:mysql//127.0.0.1:3306/testdb?characterEncodeing=utf8
#数据库用户名
spring:
datasource:
username: root
#数据库密码
spring:
datasource:
password: *****
#开启调试日志(enable debug logs)
debug: true
#开启跟踪日志(enable trace logs)
trace: true