- 博主简介:想进大厂的打工人
- 博主主页:@xyk:
- 所属专栏: JavaEE进阶
Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发
的。Spring Boot是一个开源的Java框架,用于快速构建应用程序和微服务。它基于Spring Framework,通过自动化配置和约定优于配置的方式,使开发人员可以更快地启动和运行应用程序。Spring Boot提供了许多开箱即用的功能和插件,包括嵌入式Web服务器、安全性、数据访问、缓存、测试和监控等,下面就来对SpringBoot项目中的相关配置文件来进行阐述~
目录
文章目录
一、SpringBoot的优点
二、SpringBoot配置文件
2.1 什么是配置文件
2.2 为什么需要配置文件
2.3 properties格式的配置文件
2.4 yml格式的配置文件
2.5 yml 配置不同类型及null:
2.6 yml配置对象
三、设置不同环境的配置文件
3.1 创建不同环境的配置文件:
3.2 在 application.properties或application.yml 中设置行环境
Spring Boot 项⽬有两个主要的⽬录:
正确路径:
为了将Bean注入到SpringBoot容器中,要把注入到容器类的类和启动类放到同级目录下
这时候 Spring Boot 项⽬才能正常的将 bean 注⼊到容器中,以上情况反应了 Spring Boot 项⽬的另⼀个特点:约定⼤于配置!!!
配置文件是一种存储应用程序配置信息的文件,它包含了应用程序所需要的各种参数、选项和设置。SpringBoot配置文件是必须要存在的一个文件,用来配置SpringBoot应用程序的行为,可以使用多种配置文件格式,比如:properties、yml等。
整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:
想象⼀下如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的。
Spinrg常见的配置文件有两种:.properties 和 .yml,理论上来说,允许两种格式的配置文件可以同时存在,但是在实际开发中,为了可以更好的维护并降低故障发生的概率,我们通常只使用其中一种格式的配置文件,需要特别注意的是,.properties 格式的配置的优先级大于 .yml 格式的配置文件,但加载完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息。
properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,比如:
# 端口号设置
#server.port=8080
mytest=zhangsan
mytest2=zhangsan2
# 连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
那么,如何读取配置文件中的自定义配置信息呢?
若想要主动读取配置文件的信息,可以使用@Value
注解,该注解使用${}
格式读取,以下代码演示如何读取上述代码中的自定义配置项:
从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息,⽐如这些:
但是 .properties 格式对中文支持并不好,会出现乱码的情况,那么我们可以使用 .yml来解决这种问题~
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语
⾔”。
基本语法:yml 是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒汗加空格的⽅式组成的,其中的空格不可省略!!
server:
port: 6060
# 自定义配置
mytest2: zhangsan2
# 配置数据库连接
spring:
profiles:
active: prod
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: root
相较 properties,代码冗余度降低~ yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可。
# 字符串
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: ~
需要注意的是,字符串类型是否带有引号,读取出来是不一样的~~
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
@Component
public class ReadYml {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@PostConstruct
public void postConstruct() {
System.out.println("string.str1:" + str1);
System.out.println("string.str2:" + str2);
System.out.println("string.str3:" + str3);
}
}
从上述结果可以看出:
只有带有双引号的字符串,转义字符才能被正常解析。对于无引号和单引号的情况,转义字符没有变化的显示出来~
我们还可以在 yml 中配置对象,如下配置:
student:
id: 1
name: Java
age: 18
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解@ConfigurationProperties 来读取
@Component
@ConfigurationProperties("student")
@Data
public class Student {
private int id;
private String name;
private int age;
}
在以上代码中,getter、setter以及toString方法均通过lombok实现。需要注意的是@ConfigurationProperties注解中的内容,需要与配置文件中对象的key相同。
@Autowired
private Student student;
@PostConstruct
public void postConstruct(){
System.out.println(student);
}
想要查看 Spring Boot 更多系统配置项,访问官⽹:官网地址
# 配置数据库连接
spring:
profiles:
active: prod
SpringBoot就会自动在运行的时候,加载设置的相关配置文件~