【JavaEE进阶】Spring Boot文件配置

目录

🍀配置文件的作用

🌴SpringBoot配置⽂件

🎋配置文件的格式

🎄properties配置文件

🚩properties基本语法

🚩读取配置文件

🚩properties的缺点

🌳yml配置文件

🚩yml基本语法

🚩yml 使用进阶

🏀yml配置不同数据类型及null

🏀yml配置读取

🏀配置对象

🏀配置集合

🏀配置Map

🚩yml优缺点


🍀配置文件的作用

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

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

硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是我们常说的"代码写死"

⽐如⼿机字体⼤⼩

如果采⽤硬编码的⽅式,就直接在程序中指定字体⼤⼩,所有的⽤⼾使⽤的都是同⼀个字体⼤⼩

但是不同的⽤⼾有不同的偏好,我们可以把⼿机字体的⼤⼩放在配置⽂件中,当程序启动时,读取配 置,以⽤⼾设置的字体⼤⼩来显⽰

使⽤配置⽂件,可以使程序完成⽤⼾和应⽤程序的交互,或者应⽤程序与其他应⽤程序的交互

🌴SpringBoot配置⽂件

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

很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

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

项⽬的启动端⼝

SpringBoot内置了Tomcat服务器,默认端⼝号是8080, 但是⽤⼾电脑上8080端⼝号有可能就被其他 应⽤程序占⽤了, 所以SpringBoot需要⽀持让⽤⼾⾃定义端⼝号

数据库连接信息

为了更⽅便简单的访问数据库,出现了⼀些持久层框架,其实就是对JDBC进⾏了更深层次的封装.让⽤ ⼾通过简单⼏⾏代码就可完成数据库的访问.但是不同的应⽤程序访问的数据库不同,这些持久层框 架就需要⽀持⽤⼾可以⾃定义配置数据库的连接信息

接下来我们先简单配置看一下:

我们在前⾯讲了Tocmat默认端⼝号是8080,所以我们程序访问时的端⼝号也是8080,但是如果8080端⼝号已经被其他进程使⽤了呢?我们可以通过配置⽂件来修改服务的端⼝号,SpringBoot在创建项⽬时,就已经帮我们创建了配置⽂件,比如我们查看图书管理系统的配置文件:​​​​​​​

修改 application.properties ⽂件​​​​​​​

再次启动项目,我们观察日志中tomcat所用端口​​​​​​​

显⽰Tomcat启动端⼝号为9090

访问程序:​​​​​​​127.0.0.1:9090/login.html

🎋配置文件的格式

SpringBoot配置⽂件有以下三种:

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

yml为yaml的简写,实际开发中出现频率最⾼.yaml和yml的使⽤⽅式⼀样,这里只讲yml⽂件的使⽤;并且上述文件名字不能有错,否则配置无效

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

一般来说,一个项目只需一个配置文件即可,那就想创建两个配置文件,且配置项冲突会发生什么

启动项目:发现当前使用的是9090端口,也就是说properties的优先级高于yml;若properties中没有配置端口号,则使用yml中的端口号

一般情况下会使用yml,那么如何理解这两种配置文件的区别呢?

类似商品的包装⼀样,有新⽼两款包装.properties类型的配置⽂件就属于⽼款包装,也是创建SpringBoot项⽬时默认的⽂件格式(主要是因为仓库⾥还有库存),⽽yml属于新版包装,如果⽤⼾了解情况直接指定要新款包装,那么就直接发给他

小结:

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

🎄properties配置文件

properties配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件

这里重新建一个项目

🚩properties基本语法

properties是以键值的形式配置的,key和value之间是以"="连接的,key的单词之间使用 .分割如:​​​​​​​

想要了解更多配置的小伙伴可以参考: Common Application Properties :: Spring Boot

🚩读取配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。

@Value 注解使⽤" ${} "的格式读取,如下代码所⽰:

获取properties 配置如下:

获取如下:

🚩properties的缺点

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

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

想要解决这个问题,就可以使⽤yml配置⽂件的格式化了.

🌳yml配置文件

yml是YAML是缩写,它的全称Yet Another Markup Language翻译成中⽂就是“另⼀种标记语⾔

🚩yml基本语法

yml是树形结构的配置⽂件,它的基础语法是"key: value".

key和value之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

我们刚刚也说过了,yml可以解决properties配置⽂件冗余信息的问题。接下来我们就以数据库为例,看一下yml是如何解决的,yml配置文件如下:

使用注意事项:

  • properties用 . 将每一层文件分开,yml每一层结束后用 :分开。并且需要换行(当然也可以使用 . )
  • 换行前面空余部分是一个空格(相当于是一个层级)而不是一个tab

接下来我们看一看两者的代码量的对比,对比如下:

🚩yml 使用进阶

🏀yml配置不同数据类型及null

🏀yml配置读取

yml读取配置的⽅式和properties相同,使⽤@Value注解即可,实现代码如下:

运行结果:

value值加单双引号问题:

字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
尝试在application.yml中配置如下信息:​​​​​​​获取配置文件代码如下:

执行结果如下:

从上述结果可以看出:

  • 字符串默认不⽤加上单引号或者双引号。
  • 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.
  • 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义.

此处的转义理解起来会有些拗⼝,\n本意表⽰的是换⾏
使⽤单引号会转义,就是说,\n不再表⽰换⾏了,⽽是表⽰⼀个普通的字符串
使⽤双引号不会转义,表⽰\n表⽰的是它本⾝的含义,就是换⾏

当然每个人理解不同,意思也就不同

🏀配置对象

我们还可以在yml中配置对象,如下配置:

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

这个时候就不能⽤@Value来读取配置中的对象了,此时要使⽤另⼀个注解

@ConfigurationProperties(prefix="student") 注解,这意味着 Spring Boot 将尝试从 application.yml 文件中查找以 student 为前缀的属性来绑定到 Student 类的字段。

这个注解的意思是个读取了配置文件里面的对象

读取代码如下:

运行结果:

🏀配置集合

配置⽂件也可以配置list集合,如下所⽰

集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

运行结果:

注意事项:

🏀配置Map

配置⽂件也可以配置map,如下所⽰:

Map的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下

运行结果:

🚩yml优缺点

优点:

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

缺点:

  1. 不适合写复杂的配置⽂件
  2. 对格式有较强要求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值