JavaEE进阶第六课:SpringBoot配置文件

news/2025/3/15 3:42:26/

上篇文章介绍了SpringBoot的创建和使用,这篇文章我们将会介绍SpringBoot配置文件

目录

  • 1.配置文件的作用
  • 2.配置文件的格式
    • 2.1 .properties语法
      • 2.1.1.properties的缺点
    • 2.2 .yml语法
    • 2.2.1优点分析
    • 2.2.2配置与读取对象
    • 2.2.3配置与读取集合
    • 2.2.4补充说明
  • 3.设置不同环境的配置文件
  • 结束语

1.配置文件的作用

上一篇我们介绍到,SpringBoot有个很厉害的功能叫自动装配,其中要利用的就是我们的配置文件。那么具体配置文件有什么用呢?

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:

  • 数据库的连接信息(包含⽤户名和密码的设置);
  • 项⽬的启动端⼝; 第三⽅系统的调⽤秘钥等信息;
  • ⽤于发现和定位问题的普通⽇志和异常⽇志等。

如果没有配置信息,那么 Spring Boot项⽬就不能轻易的更改连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的。

2.配置文件的格式

对于SpringBoot的配置文件,主要有以下两种格式

  • .properties 旧
  • .yml 新

对于这两种配置文件格式来讲,创建SpringBoot项目默认的是老款.properties
在这里插入图片描述

当然我们叶可以主动换成新款.yml,注意文件的名称必须是application哦,这属于一种约定,后面有特殊情况会介绍。
在这里插入图片描述
写到这里,大家可能会有疑问了,这两种配置文件可以共存吗?如果可以的话,会以哪个配置文件的内容为先呢?

对于这个问题,首先两者是可以共存的,且SpringBoot扫描配置文件时都会扫描,但当出现两个配置文件设置了相同的配置项但值不同时,会采纳.properties格式,毕竟以老员工为主。

设置启动端口
.yml 9999
在这里插入图片描述
.properties 8888
在这里插入图片描述
运行得到结果:8888
在这里插入图片描述

当然啦,实际开发肯定是统一格式才好看

2.1 .properties语法

.properties采用key=value的格式
在这里插入图片描述
(注:# 代表注释)
配置完成后,如何读取配置信息呢?
通过注解@Value(“${key}”) 来获取信息:

@Controller
public class MyTest {@Value("${mytest}")public String mytest;@PostConstructpublic void test1(){System.out.println("mytest:"+mytest);}
}

在这里插入图片描述

@Controller在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct初始化⽅法,这个时候就能读取到配置信息了

2.1.1.properties的缺点

观察我们配置的数据库连接,可以发现代码很冗余,spring.datasource多次出现,这是不好的,因为当配置项十分多时,代码就会很难看;同时.properties还不能处理中文字符,容易乱码,就像我们把zhangsan改为张三,再一次运行:
在这里插入图片描述
要解决这些问题,需要使用到新款.yml

2.2 .yml语法

yml 是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒汗加空格的⽅式组成的,其中的空格不可省略。
基础语法如下:

server:port: 9999# 设置数据库配置项
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8username: rootpassword: root

这里面的空格都很有讲究,不要轻易的删增。
在这里插入图片描述
比如,这一块就是根据空格来确定这是几级结构的。

.yml的读取和.properties相同,都是通过@Value注解:
在这里插入图片描述
通过.yml,我们的代码不再那么冗余,但这是不够的,因为yml远远不止如此

2.2.1优点分析

1.首先写法更简单,代码冗余度也低
2.支持更多数据类型,包括整数,字符串,对象,数组等等
3.支持更多语言,不只是Java

2.2.2配置与读取对象

配置对象
方案1:

# 自定义配置项
student:name: 张三age: 15

方案二:

student: {name: 张三,age: 15}

//注意:后面有一个空格

读取对象
实体类:

@Component
@ConfigurationProperties(prefix = "student")//1.使用该注解
@Data//类中属性要和配置对象名对应相同,且提供getter和setter方法
public class Student {public String name;public int age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

调用类:

@Component
public class MyStu {@Autowiredpublic Student stu;@PostConstructpublic void test(){System.out.println(stu);}}

结果:
在这里插入图片描述

2.2.3配置与读取集合

配置集合:

tag:name:- 张三- 李四- 王五#tag: {name: [张三,李四,王五]}

两种方案均可
读取集合:
和读取对象一样,先创建实体类,加上注解,然后调用即可,一模一样。

2.2.4补充说明

在yml语法中,key:value的value的值有没有单,双引号是值得讨论的问题,我们看下面这个例子:

添加字符串配置项:
在这里插入图片描述
读取这这个字符串并打印:
在这里插入图片描述
可以发现,加了双引号的中转义字符\n(换行)正常生效了,无引号和单引号的\n被当作了普通字符串打印了出来,所以这里大家使用时要注意哦!

3.设置不同环境的配置文件

一般来说,实际开发下可能会有很多种配置文件,比如开发版,正式版等等,我们想切换肯定不是现写,而是已经写好了直接更换就行,这里就要用到配置文件中一个配置项:

  • spring.profiles.active

通过设置它的值,来切换配置文件。
前面我们说配置文件的名称application是不能乱改的,但是这里属于特殊情况,我们可以在其后添加

  • application-名称
    配置项设置:
    active的值就是-后面的名称
    在这里插入图片描述

比如说-dev里面启动端口为9999,-new为8888,最后运行结果:
在这里插入图片描述
想变8888,只要active换成new即可!

结束语

那么本节课就到此结束啦,下一节课我们将会进入SpringBoot日志文件的学习!喜欢的话,请多多关注我哦!


http://www.ppmy.cn/news/29101.html

相关文章

GPU会变得更便宜吗?GPU 定价更新

在英伟达和AMD发布了一段时间的一致显卡之后,事情在二月份已经降温。没有新的GPU可以谈论,没有特别惊人的交易或任何东西,但仍然值得看看市场现在的表现如何,因为它已经稳定下来,以及我们在未来几个月可以期待什么。过…

2022 年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项样题

2022 年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项样题 一、 赛项信息 第一场比赛: 竞赛阶段 任务阶 段 竞赛任务 竞赛时 间 分值 第一阶段 任务 1 网络平台搭建 90 平台搭建与安全 任务 2 网络安全设备配置与防护 210 设备配置防护…

分享一种实用redis原子锁的方式

1. setnx(lockkey, 当前时间过期超时时间) ,如果返回1,则获取锁成功;如果返回0则没有获取到锁,转向2。2. get(lockkey)获取值oldExpireTime ,并将这个value值与当前的系统时间进行比较,如果小于当前系统时间…

【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程

SSL/TLS层的位置 SSL/TLS层在网络模型的位置,它属于应用层协议。接管应用层的数据加解密,并通过网络层发送给对方。 SSL/TLS协议分握手协议和记录协议,握手协议用来协商会话参数(比如会话密钥、应用层协议等等)&…

NVIDIA CUDA初级教程视频学习笔记1

周斌老师 课程链接: 目录第一课内容生态环境第一课 CPU体系架构的概述什么是CPU指令存储器架构CPU内部的并行性第一课 预修课程: Cuda c programming guide 参考内容 1,2,3查找一下。 内容 CPU体系架构概述 并行程序设计概述 CUDA开发环境…

(六十二)当我们在SQL里进行分组的时候,如何才能使用索引?

今天我们接着上次的内容来谈谈在SQL语句里假设你要是用到了group by分组语句的话是否可以用上索引,因为大家都知道,有时候我们会想要做一个group by把数据分组接着用count sum之类的聚合函数做一个聚合统计。 那假设你要是走一个类似select count(*) fr…

机器学习:基于逻辑回归对某银行客户违约预测分析

机器学习:基于逻辑回归对某银行客户违约预测分析 作者:AOAIYI 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞&#x1…

JPA之实体之间的关系

JPA之实体之间的关系 10.1.1实体类创建 注解的应用 Table,Entity IdGeneratedValue指定主键,Column P174 实体类编写规范 Table(name "t_user") Entity(name "User") public class User implements Serializable {IdGeneratedVa…