本文,我们就要来介绍一下Spring Boot中的配置文件 ,在学习了本文之后,可以很清楚地知道如何在Spring Boot中去配置项目的一些系统设置
首先我们先来聊聊什么是配置文件?
配置文件是一种 文本文件,通常用于存储程序的参数和设置。它包含了程序运行所需的各种选项和配置信息,例如界面风格、服务器连接信息、默认语言等。这些信息可以通过键值对
的形式表示,也可以使用特定的语法和结构
描述更复杂的配置信息。
配置文件通常由 程序在启动时读取和解析,以自定义程序的行为。例如,在网站开发中,网站的配置文件通常包含了数据库连接信息、安全性设置、日志记录等重要信息。在操作系统中,配置文件则可以用于指定各种系统参数,如网络连接、设备驱动程序等。
配置文件的格式和内容因程序而异,常见的配置文件格式包括INI文件
、XML文件
、JSON文件
等。INI文件是最早的配置文件格式之一,它使用简单的键值对语法来存储配置信息。XML和JSON文件则更加灵活和可扩展,可以描述更复杂的配置信息。
除了使用传统的文本编辑器手动编写配置文件外,现在也有许多工具可以帮助用户轻松地编辑和管理配置文件。例如,一些应用程序具有自己的 配置文件编辑器,用户可以通过界面来直观地编辑配置信息。另外,一些配置管理工具则可以帮助用户 自动化地管理和维护配置文件,例如版本控制、备份和恢复等。
知道了什么是配置文件之后,我们来看看它的作用有哪些
整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:
想象⼀下如果没有配置信息,那么 Spring Boot 项⽬就 不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的⭐
我们可以来看看配置文件最简单的功能:修改服务器的启动端口号 对于默认的端口我们可以看到是8080
现在我们通过application.properties
这个Spring Boot的配置文件将其修改为 9090
server.port=9090
然后在修改之后我们再去启动项目可以发现端口号被修改成为9090
如果我们想要访问这个项目就不能使用 localhost:8080
了,而要使用 localhost:9090
地址了
清楚了配置文件的作用之后,我们再来看看它的格式是怎样的
Spring Boot 配置⽂件主要分为以下两种格式:
.properties
.yml
这就好像连锁店⾥⾯的统⼀服装⼀样,有两种不同的款式,properties
类型的配置⽂件就属于⽼款“服饰”,也是创建 Spring Boot 项⽬时默认的⽂件格式(主要是由于仓库⾥还有库存),⽽ yml
属于新版款式,如果⽤户了解情况直接指定要新款服饰,那么就直接发给他
那这两种格式有什么区别呢?我们来对比一下看看
properties文件
yml文件
.properties
可以和 .yml
⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项⽬中时,如果配置⽂件中出现了同样的配置,⽐如 properties 和 yml 中都配置了“server.port”,那么这个时候会 以 properties 中的配置为主,也就是 .properties
配置⽂件的优先级最⾼,但加载完 .properties
⽂件之后,也会加载 .yml
⽂件的配置信息。properties 配置⽂件是最早期的配置⽂件格式,也是创建 Spring Boot 项⽬默认的配置⽂件
我们先来看看它的基本语法:
“=”
连接的,如:# 配置项⽬端⼝号
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
【小贴士】:
#
开头的server.port/spring.datasource.url...
—> 系统配置文件在写好之后不仅仅就好了哦,我们还可以去读取到里面的内容,一起来试试吧
如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value
注解来实现
# 用户自定义配置
javaclass=106
@RestController
public class TestController {
@Value("javaclass")
private String myconfig;
@RequestMapping("/test/sayhi")
public String sayHi(){
return "hello world ->" + myconfig;
}
}
value
值,而是key
值,这就使得很多同学产生了疑惑?这里我们来谈谈
value
值正确的读取方法:@Value 注解使⽤“${}”
的格式读取
@Value("${javaclass}") // 一定要是 ${key} 的格式
value
值@Value("${server.port}")
经过上面一系列的查看,我们来对
properties
这个格式的文件来分析一下
value
值,然后去访问一下看看会有什么问题mytest=测试properties文件
properties
可以看得清楚,而且这是在我的 IDEA配置文件已经设置了UTF-8的字符集之后然后我们再根据两个不同是配置文件来看看它们之间的书写区别
于是我们便观察到了在properties
文件中存在着很多重复的内容
那么这个时候,就轮到我们的
.yml
文件出场了,我们一起来看看它是怎么诞生的吧
举一个很简单的例子,本专栏我们介绍的是【Spring Boot】,很多学习Java的同学相信一定听说过【Spring Cloud】,这个呢就是我们现在业界所称的 微服务,其实在早期 Spring Cloud 没出来的时候【Spring Boot】它就是一种微服务,那我们便可以来谈谈为什么要有微服务的出现呢?
原因就在于:随着团队的变大,不同业务部门有相同需求,所以要把原来的功能分成多个不同的模块。例如我们一个教育部门中的教务管理系统,原本在比较小型的时候之后一两个功能,那可以将这些模块都写在一起,但是当功能慢慢地增多,出现了:
此时我们就要考虑到微服务了,将这些模块作为一个个功能给单独提取出来,便可以 实现很好地解耦,减少代码的维护成本
而且在一个项目中,我们不仅仅只是使用到一门编程语言,可能会有多个,那么运维在进行维护的时候,可能会收到使用不同编程语言所描述的程序,这就会对运维的要求很高,所以需要一个通用的配置文件去解决这些问题 —— 此时就有了yml
配置文件的诞生
我们来
yml
文件优点:
JSON语⾔
类似了解了
yml
文件的诞生背景以及其优点之后,我们来学习一下它的基本语法
key: value
,注意 key 和 value 之间使⽤英⽂冒号加空格的⽅式组成的,其中的空格不可省略我们来看一下它的正确与错误配置格式:
使用yml
格式的文件去连接MySQL数据库的代码如下:
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: 123456
当然
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: ~
yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可分级目录下的内容读取不用
:
也是用.
① 普通读取
@Value("${string.hello}")
private String hello;
② 特殊读取:value 值加单双引号
以下是测试代码:
mystr1: 你\n好 # 所见即所得
mystr2: '你\n好' # 所见即所得
mystr3: "你\n好" # 一一输出字符串内部的东西
@Value("${mystr1}")
private String mystr1;
@Value("${mystr2}")
private String mystr2;
@Value("${mystr3}")
private String mystr3;
@PostConstruct // 在spring容器启动的时候执行, 可以做一些初始化的工作
public void doPostConstruct(){
System.out.println("---------------------------------");
System.out.println(mystr1);
System.out.println(mystr2);
System.out.println(mystr3);
System.out.println(hello);
System.out.println("---------------------------------");
}
\n
也照样地打印出来,所以就出现了换行的现象③ 读取配置对象
对于【配置对象】来说,我们不可以用
@Value
来读取配置中的对象,要使用另一个注解@ConfigurationProperties
@ConfigurationProperties
这个注解,那Spring就会知道有人让我去读取这个类,我们现在配置文件中写入这个对象
# 配置对象的写入
student:
id: 1
name: zhangsan
age: 18
然后我们去创建一个实体类进行测试,记得加上@Component
和@Data
注解哦~
@ConfigurationProperties("student")
@Component // 存对象:将当前的类托管给Spring, 此时就可以触发注解
@Data // 获取到Get和Set方法
public class StudentComponent {
private int id;
private String name;
private int age;
}
最后在TestController
类中将 StudentComponent类 的对象通过@Autowired
依赖注入交给Spring去管理
@Autowired // 取对象:从Spring中去读取到对象
private StudentComponent studentComponent;
@PostConstruct
public void doPostConstruct(){
System.out.println("---------------------------------");
System.out.println(studentComponent);
}
# 配置集合的写入
dbtypes:
name:
- mysql
- sqlserver
- db2
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
dbtypes: {name: [mysql,sqlserver,db2]}
集合的读取和对象⼀样,也是使⽤
@ConfigurationProperties
来读取的,具体实现如下:
@ConfigurationProperties("dbtypes")
@Component
@Data
public class ListConfig {
private List<String> name;
}
@Autowired
private ListConfig listConfig;
System.out.println(listConfig.getName());
然后我们便可以看到,我们也顺利地读取到了集合中的所有对象:
想要查看 Spring Boot 更多系统配置项,访问 官⽹
接下去我们来看一道有关Spring Boot配置文件很经典的面试题:properties 与 yml 格式文件的区别
key=value
的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似json
格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略。除了讲解上面的一些基础知识外,我们再来拓展延伸一下
Spring Boot 读取配置⽂件的 N 种⽅法
更多系统配置项
再来讲一种企业里对于配置文件的定义是怎样的
application.yml
—— 主配置文件(存放的是公共的配置项)application-dev.yml
—— 开发环境application-prod.yml
—— 生产环境application-test.yml
—— 测试环境给大家看看企业中的大项目都是怎样的,都是有多个配置文件的
从上面企业级别的开发我们可以看出对于多个环境,它们的文件名大致是不变的,变的只是一些特殊的地方,我们只要注意这些就好了,以下是配置文件的命名规则:
① 必须有主配置文件,主配置文件名必须是 application.yml(.properties)
② 不同平台的配置文件,每个平台拥有一个配置文件,配置文件的名称有要求 application-xxx.yml
我们自己去模拟一下试试,这里先给出需求:
6666
7777
8888
然后我们便根据这个规则去配置一下各个环境的启动端口号吧
# 配置application-dev.yml的启动端口号
server:
port: 6666
# 配置application-dev.yml的启动端口号
server:
port: 7777
# 配置application-dev.yml的启动端口号
server:
port: 8888
最后我们去主的配置文件设置当前活跃的环境
spring:
profiles:
active:
- dev
接下去我们重新启动项目来看看启动端口号是否发生了变化
然后我再将活跃的环境改为prod
生产环境之后,启动端口号又发生了一些变化
spring:
profiles:
active:
- prod
以上就是我们对于企业当中配置文件的一些设置,读者可以自己去试试
最后来总结一下本文所学习的内容
.properties
和.yml
,总览地对比了一下两种文件格式有何不同.properties
文件来说,它虽然书写格式简单明确,不容易出错,但是呢存在着【乱码问题】和【冗余的信息】这两块缺点,所以我们推出了.yml
文件.yml
文件来说呢,它就有着很多的优点了:
JSON语⾔
类似.yml
文件,我们还学习了一些进阶的内容,知道了如何去读取 普通内容、value 值加单双引号的内容、配置对象以及配置集合 这些application-dev.yml
、application-prod.yml
、application-test.yml
以上就是本文要介绍的所有内容,感谢您的阅读