首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Spring】探秘 Spring Boot 配置文件:藏在代码背后的 “魔法配方”,一键激活项目超能力

【Spring】探秘 Spring Boot 配置文件:藏在代码背后的 “魔法配方”,一键激活项目超能力

作者头像
用户11288949
发布2025-01-17 13:58:11
发布2025-01-17 13:58:11
4030
举报
文章被收录于专栏:学习学习

📚️1.配置文件的作用

计算机上有数以千计的配置⽂件, 我们使⽤的绝⼤多数软件, ⽐如浏览器, 微信, Idea, 甚⾄电脑, ⼿机, 都离不开配置⽂件. 我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上, ⽐如C:\Users, C:\Windows⽂件夹, 以及各种 *.config, *.xml ⽂件

配置文件:

配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏

其实,可以发现配置配置,可以想象成我们使用idea之前要进行环境的配置,其实我们在使用idea时,并没有和这些文件打交道,但是这些环境的配置在我们使用idea时默默的发挥作用;

1.1Spring Boot配置文件

SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.

很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如: • 项⽬的启动端⼝ • 数据库的连接信息(包含⽤⼾名和密码的设置) • 第三⽅系统的调⽤密钥等信息 • ⽤于发现和定位问题的普通⽇志和异常⽇志等.

项目的启动端口,由于springboot内置了Tomcat的服务器,默认的端口是8080,但是如果8080端口被占用后,就要重新配置这里的服务器端口;

📚️2.配置文件的快速入手

在idea中springboot项目中就存在这里的配置文件的操作项目:

注意:这里默认的就是properties,小编这里就是yml,后面小编会讲到

接下来我们直接改变这里的服务器端口号为:9090

代码如下:

代码语言:javascript
复制
server.port=9090

这里的意思就是:此时的端口号为9090,此时我们就直接访问进行验证;

访问的URL就是:http://127.0.0.1:8080/login.html;

可以看到此时就是无法进行8080端口服务器的访问了,那么此时我们将8080改成为9090,此时的界面如下:

可以看到此时就是拿到了我们这里的界面,可以发现此时配置文件就可以改变程序的某些配置,例如端口号,以及其他的对象这类的,后面有讲;

📚️3.配置文件的格式

Spring Boot 配置⽂件有以下三种:

• application.properties • application.yml • application.yaml

解释:yml 为yaml的简写, 实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样, 这里只讲yml⽂件的使⽤

当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml 文件

以下就是两种配置文件的格式项目文件

注意:

1. 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更⾼. 2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率

当然实践出真知,此时约定两者的服务器端口号:

代码语言:javascript
复制
//application.properties

server.port=8080

//application.yml

server:
   port: 9090

那么此时我们访问9090,可以发现此时的结果如下:

哦豁,此时又是不可以进行访问了,那么接下来就是使用8080来进行操作,毋庸置疑这里的8080端口的服务器是可以与浏览器进行连接的,小编就不再进行演示了;

📚️4.properties 配置⽂件说明

4.1properties的基本语法

properties 是以键值的形式配置的,key 和 value 之间是以"="连接的,如:

代码语言:javascript
复制
# 配置项⽬端⼝号
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

可以发现,每个单词的连接就是“ . ”,然后key与value之间的连接就是“ = ”;

4.2配置文件的读取

这里我们可以在代码中读取到配置文件;可以使⽤ @Value 注解来实现。@Value 注解使⽤" ${} "的格式读取;

代码如下:

此时我们设置一个需要重配置文件中拿到的数据:

代码语言:javascript
复制
server.port=8080

school.study.id=1207

此时就是我们所规定的配置文件(这里的配置文件是自己定义的),我们就可以拿到这里的自己配置的文件的数据了;

代码语言:javascript
复制
@RestController
@RequestMapping("/test")
public class test {

    @Value("${school.study.id}")
    Integer num;

    @RequestMapping("id")
    public String getNum(){
        return "拿到的值"+num;
    }

}

此时就是通过value拿到这里的值,然后进行返回,进行浏览器显示:

4.3properties的缺点

properties 配置是以 key-value 的形式配置的,如下图所⽰:

缺点:

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息

📚️5.yml配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔. 我们先来学习yml的语法

5.1yml基础语法

yml 是树形结构的配置⽂件,它的基础语法是"key: value".key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略基础语法如下:

代码语言:javascript
复制
spring:
  application:
    name: Spring-book
server:
  port: 9090
student:
  name: lisi
  id: 0829
  age: 19

那么这里进行数据库的连接如下所示:

代码语言:javascript
复制
spring:
 datasource:
 url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
 username: root
 password: root
5.2yml配置文件的读取
5.2.1配置不同类型的数据

在yml中配置不同类型的数据的具体格式如下所示:

代码语言:javascript
复制
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value:''

注意:空字符串后面啥都不用加,此时这里加上' '主要是为了方便我们这里进项观察

5.2.2配置对象的读取

这里和上面一样,在读取数据的时候需要的就是@value注解进行操作,但是这是只是一种情况,引用的方式和上面properties的方式一致,这里小编就不再进行演示了,那么对象的获取就是另一种注解:@ConfigurationProperties

这里的yml配置文件的代码如下所示:

代码语言:javascript
复制
student:
  name: lisi
  id: 0829
  age: 19

那么我们如何获取到配置文件中的数据呢?

具体的代码如下所示:

代码语言:javascript
复制
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class StudentInfo {
     private String name;
     private int id;
     private int age;
}

注意:

这里小编的使用了lombok依赖中的@data,来自动实现get与set,tostring等等的重写;

使用component将这里的对象交给spring进行管理

最后使用@ConfigurationProperties来进行配置文件中对象的获取;

最后演示代码如下:

代码语言:javascript
复制
@RestController
@RequestMapping("/test")
public class test{
    @Autowired
    private StudentInfo studentInfo;

    @RequestMapping("/student")
    public String getStudent(){
        return "获取到的对象值:"+studentInfo;
    }
}

解释:这里就是通过Autowired来进行对象的引入的操作的;最后使用路由映射来进行对象的打印的操作;

最终的效果如下所示:

此时我们可以发现已经拿到了这里的对象里各个属性的值;

5.2.3配置列表的读取

这里的yml的配置文件的代码如下所示:

代码语言:javascript
复制
dbtypes:
  name:
    - hello
    - java
    - nihao

注意:在每个列表的成员描述中“ - ”与每个值之间必须存在空格;

那么此时我们的代码如下所示:

代码语言:javascript
复制
@Component
@Data
@ConfigurationProperties("dbtypes")
public class DbtypesInfo {
    private List<String> name;
}

解释:

@Data负责重写,列表的名称要和yml配置文件的一致

@component负责将这个对象交给spring管理

@configurationProperties负责获取到配置文件中列表的值

那么展示的代码如下:

代码语言:javascript
复制
 @Autowired
    private DbtypesInfo dbtypes;

    @RequestMapping("/dbtypes")
    public String getDbtypes(){
        return "获取到的列表值:"+ dbtypes.toString();
    }

解释:这里就是通过Autowired来进行对象的引入的操作的;最后使用路由映射来进行对象的打印的操作;

最后的结果如下:

5.2.4配置Map的读取

配置文件yml的写法如下:

代码语言:javascript
复制
maptypes:
  map:
    string1: zhangsan
    string2: lisi
    string3: wangwu

这里就是map的配置文件的写法

那么接下来就是获取这里的配置文件:

代码语言:javascript
复制
@Data
@Component
@ConfigurationProperties("maptypes")
public class MapInfo {
    private Map<String,String> map;
}

解释:

Data负责重写,map的名称要和yml配置文件的一致

@component负责将这个对象交给spring管理

@configurationProperties负责获取到配置文件中map的值

此时展示的代码如下:

代码语言:javascript
复制
  @Autowired
    private MapInfo mapInfo;

    @RequestMapping("maptypes")
    public String getMaptype(){
        return "获取到的map:"+ mapInfo.toString();
    }

最终的结果展示就是如下:

5.3yml的优缺点

优点:

1. 可读性⾼,写法简单, 易于理解 2. ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态 3. ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤

缺点:

1. 不适合写复杂的配置⽂件 2. 有比较严格的格式要求,例如对于空格这个是必不可少的

📚️6.总结

本期小编主要讲解了关于Spring Boot的配置文件,如何进行快速入手,以及配置文件的格式是哪几种,关于properties格式的配置文件和yml格式的配置文件都做了比较详细的分析;

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📚️1.配置文件的作用
    • 1.1Spring Boot配置文件
  • 📚️2.配置文件的快速入手
  • 📚️3.配置文件的格式
  • 📚️4.properties 配置⽂件说明
    • 4.1properties的基本语法
    • 4.2配置文件的读取
    • 4.3properties的缺点
  • 📚️5.yml配置文件说明
    • 5.1yml基础语法
    • 5.2yml配置文件的读取
      • 5.2.1配置不同类型的数据
      • 5.2.2配置对象的读取
      • 5.2.3配置列表的读取
      • 5.2.4配置Map的读取
    • 5.3yml的优缺点
  • 📚️6.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档