【JavaEE进阶】 SpringBoot配置⽂件

文章目录

  • 🍀配置⽂件的作⽤
  • 🌴SpringBoot配置⽂件
  • 🎋配置⽂件的格式
  • 🎄properties配置⽂件
    • 🚩properties基本语法
    • 🚩读取配置⽂件
    • 🚩properties的缺点
  • 🌳yml配置⽂件
    • yml基本语法
    • 🚩yml 使⽤进阶
      • 🎈yml配置不同数据类型及null
        • 📌yml配置读取
        • 📌注意事项:value值加单双引号
      • 🎈配置对象
      • 🎈配置集合
      • 🎈配置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 ⽂件

server.port=9090

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

在这里插入图片描述

显⽰Tomcat启动端⼝号为9090

🎋配置⽂件的格式

SpringBoot配置⽂件有以下三种:

  • application.properties

  • application.yml

  • application.yaml

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

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

也可以通过spring.config.name指定⽂件路径和名称,参考链接点我

在这里插入图片描述

那么如何理解这两种配置文件的区别呢?

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

当然这里还有一些特殊情况需要说明:

  1. 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml 并存时,两个配置都会加载.如果配置⽂件内容有冲突,则以 .properties 为主,也就是.properties 优先级更⾼.

  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).

🎄properties配置⽂件

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

🚩properties基本语法

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

# 配置项⽬端⼝号
server.port=8080
  #配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

想要了解更多配置的小伙伴可以参考 SpringBoot配置

🚩读取配置⽂件

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

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

获取properties 配置如下:

@RestController
public class PropertiesController {
    @Value("${server.port}")
    private String value;
    @RequestMapping("/getValue")
    public String getValue() {
        return "端口号为:"+value;
    }
}

获取如下:

在这里插入图片描述

🚩properties的缺点

properties配置是以key-value的形式配置的,如下图所示
在这里插入图片描述

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

在这里插入图片描述

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

🌳yml配置⽂件

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

yml基本语法

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

key和value之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略
在这里插入图片描述

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

spring:
 datasource:
  url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
  username: root
  password: root

使用注意事项:

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

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

在这里插入图片描述

🚩yml 使⽤进阶

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

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

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

@RestController
public class YmlController {
    @Value("${string.value}")
    private String say;
    @RequestMapping("/getSay")
    public String getSay() {
        return "say:"+say;
    }
}

读取结果如下:
在这里插入图片描述

📌注意事项:value值加单双引号

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

string:
 str1: Hello \n 遇事问春风乄.
 str2: 'Hello \n 遇事问春风乄.'
 str3: "Hello \n 遇事问春风乄."

获取配置文件代码如下:

@RestController
public class HelloController {
    @Value("${string.str1}")
    private String hello1;
    @Value("${string.str2}")
    private String hello2;
    @Value("${string.str3}")
    private String hello3;
    @RequestMapping("/getHello")
    public String getHello() {
        System.out.println("str1:" + hello1);
        System.out.println("str2:" + hello2);
        System.out.println("str3:" + hello3);
        return "ok";
    }
}

执行结果如下:

在这里插入图片描述

从上述结果可以看出:

  • 字符串默认不⽤加上单引号或者双引号。

  • 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.

  • 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义.

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

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

🎈配置对象

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

student:
 id: 1
 name: 遇事问春风乄
 age: 18

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

student: {id: 1,name: Java,age: 18}

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

@ConfigurationProperties 来读取,具体实现如下

@ConfigurationProperties(prefix = "studnet")
@Component
@Data
public class Student {
    private int id;
    private String name;
    private int age;
}

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

读取代码如下:

@RestController
public class StudentController {

    @Autowired
    private Student student;
    @RequestMapping("/readStudent")
    public String readStudent(){
        return student.toString();
    }
}

在这里插入图片描述

🎈配置集合

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

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

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
    private List<String> name;
}

访问集合如下:

@RestController
public class ReadYm {
    @Autowired
    private ListConfig listConfig;
    @RequestMapping("/readList")
    public String readList(){
        return listConfig.toString();
    }
}

在这里插入图片描述

注意事项:

在这里插入图片描述

🎈配置Map

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

maptypes:
 map:
  k1: kk1
  k2: kk2
  k3: kk

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

maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}

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

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
    private HashMap<String,String> map;
}

访问map如下:

@RestController
public class ReadYml {
    @Autowired
    private MapConfig mapConfig;
    @RequestMapping("/readMap")
    public String readStudent(){
        return mapConfig.toString();
    }
}

在这里插入图片描述

🚩yml优缺点

优点:

  1. 可读性⾼,写法简单,易于理解

  2. ⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.

  3. ⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang,Python,Ruby,JavaScript中也可以使⽤

缺点:

  1. 不适合写复杂的配置⽂件

  2. 对格式有较强要求

⭕总结

关于《【JavaEE进阶】 SpringBoot配置⽂件》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/335518.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件服务FTP

文章目录 一、FTP协议二、VSFTPD服务介绍基础配置匿名用户访问&#xff08;默认开启&#xff09;本地用户访问虚拟用户访问 一、FTP协议 FTP协议&#xff1a;文件传输协议&#xff08;File Transfer Protocol&#xff09; 协议定义了一个在远程计算机系统和本地计算机系统之间…

【Linux的基本指令】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1、ls 指令 2、 pwd命令 3、cd 指令 4、touch指令 5、mkdir指令&#xff08;重要&#xff09; 6、rmdir指令 && rm 指令&#xff08;重要&#xff09;…

中使用 MOOTDX库读取通达信的数据,WIN+PYTHON,最新问题排查

M项目概述 - MOOTDXhttps://www.mootdx.com/zh-cn/latest/帮助文档https://www.mootdx.com/zh-cn/latest/​​​​​​​​​​​​​​​​​​​​​ 库的安装 注&#xff1a;我这的安装过程必须要ROOT权限&#xff0c;所以我用管理员的权限运行了控制台 pip install moot…

SEO文章自动生成发布网站工具【网站维护必备】

在SEO优化的过程中&#xff0c;高质量的原创文章是吸引搜索引擎和用户的关键。然而&#xff0c;对于许多站长和网站管理员而言&#xff0c;创作大量原创内容可能是一项繁琐而耗时的任务。为了解决这一难题&#xff0c;免费的147SEO软件应运而生&#xff0c;通过输入关键词或标题…

Red Hat Enterprise Linux 6.10 安装图解

引导和开始安装 选择倒计时结束前&#xff0c;通过键盘上下键选择下图框选项&#xff0c;启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致&#xff0c;引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的&#xff0c;如图所示。若手动调…

Jenkins环境配置篇-更换插件源

作为持续集成的利器 Jenkins 已经得到了广泛地应用&#xff0c;仅仅作为一个工具&#xff0c;Jenkins 已然有了 自己的生态圈&#xff0c;支持其的 plugin 更是超过 1300。在实际中如何使用以及如何更好地使用 jenkins&#xff0c;一直是大家在实践并讨论的。本系列文章将会从如…

【想要安利给所有人的开发工具】最强工具ChatGPT——分享一些使用经验

目录 &#x1f525;个人使用ChatGPT的经验 &#x1f525;如何使用ChatGPT 方法一 方法二 &#x1f525;&#x1f525;提问技巧分享 1、英语翻译员 2、面试官 3、javascript 控制台 4、Excel表格 5、作曲家 6、辩手 7、小说家 8、诗人 9、数学老师 10、网络安全…

【漏洞复现】Hikvision摄像头产品代码执行漏洞(CVE-2021-36260)

Nx01 产品简介 Hikvision&#xff08;海康威视&#xff09;是一家在中国颇具影响力的安防公司&#xff0c;其网络摄像头产品在市场上占据了相当大的份额。Hikvision的网络摄像头产品线非常丰富&#xff0c;涵盖了各种型号和功能&#xff0c;以满足不同用户的需求。 Nx02 漏洞描…

spring data mongo 在事务中,无法自动创建collection

spring data mongo 在事务中,无法自动创建collection org.springframework.dao.DataIntegrityViolationException: Write operation error on server xxx:30001. Write error: WriteError{code=263, message=Cannot create namespace xxx.xxxin multi-document transaction.…

分类预测 | Matlab实现KPCA-EBWO-SVM分类预测,基于核主成分分析和改进的白鲸优化算法优化支持向量机分类预测

分类预测 | Matlab实现KPCA-EBWO-SVM分类预测&#xff0c;基于核主成分分析和改进的白鲸优化算法优化支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-EBWO-SVM分类预测&#xff0c;基于核主成分分析和改进的白鲸优化算法优化支持向量机分类预测分类效果基本描述程序设计参…

第一部分 概述

目录 一、计算机网络在信息时代的作用 大众熟悉的三大类网络有 Internet 互连网与互联网的区别 可以从两种不同的方面来认识互联网&#xff1a; 互联网在生活中的地位 互联网 互联网负面影响 二、互联网的概述 网络的网络 基本概念 互连网基础结构发展的三个阶段 万维网www(…

【征服redis2】redis的事务介绍

目录 目录 1.redis事务介绍 2 事务出错的处理 3.Java如何使用redis事务 1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用&#xff0c;本文我们来看一下redis的事务问题。事务也是数据库的重要主题&#xff0c;熟悉关系型数据库的读者应该对事务比较了解&a…

全开源多城市同城信息小程序源码(Laravel 框架),同城分类信息发布便民小程序系统【非DZ】

同城生活分类信息小程序&#xff0c;人才招聘、房产二手 多城市地区同城分类信息发布&#xff0c;商家入驻等功能 小程序前后端代码开源无加密&#xff0c;可进行二次开发 【源码运行要求】 1、需要已认证的微信小程序 2、已备案的域名及服务器空间 推荐使用宝塔面板LinuxPHP…

为vs code配置unity开发环境

1.安装.NET.Core SDK 我们可以访问官网下载安装SDK及tool&#xff08;https://www.microsoft.com/net/download/core&#xff09;下载。有的系统只提供了执行文件&#xff0c;没有提供安装包&#xff0c;需要自己做一些配置。 下载好对应的版本就可以安装了&#xff0c;安装好以…

无人机打击激光器

激光器的应用非常广泛&#xff0c;涵盖了多个领域。以下是一些主要的激光器应用&#xff1a; 医疗领域&#xff1a;激光器在医疗行业中有着重要应用&#xff0c;比如用于激光手术&#xff08;如眼科手术&#xff09;、皮肤治疗、牙科治疗、肿瘤治疗等。 工业制造&#xff1a;在…

小白水平理解面试经典题目LeetCode 121 Best Time to Buy and Sell Stock

121 Best Time to Buy and Sell Stock (买卖股票的最佳时机) 你好&#xff0c;2024年的第一个月&#xff0c;又是秋风萧瑟天气凉&#xff0c;草木摇落露为霜。.。。在这个特殊的时代&#xff0c;作为我们普通的一个打工人&#xff0c;我们用这道题&#xff0c;开启对这个不符合…

Spark面试题

1. spark core 1.简述hadoop 和 spark的不同点&#xff08;为什么spark更快&#xff09;♥♥♥ shuffle都是需要落盘的&#xff0c;因为在宽依赖中需要将上一个阶段的所有分区数据都准备好&#xff0c;才能进入下一个阶段&#xff0c;那么如果一直将数据放在内存中&#xff0c…

线性规划案例分享

今天想写一个最优传输的简单实现&#xff0c;结果学歪了&#xff0c;学到线性规划去了&#xff0c;这里我发现了一个宝藏网站 虽然是讲计量经济的&#xff0c;但是里面提供的公式和代码我很喜欢&#xff0c;有时间可以好好读一下 https://python.quantecon.org/lp_intro.html …

【咕咕送书 | 第八期】羡慕同学进了大厂核心部门,看懂这本书你也能行!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论…

git本地分支的合并

目录 第一章、本地分支的切换测试1.1&#xff09;切换之前的master分支下文件内容1.2&#xff09;切换到develop分支后修改文件1.3&#xff09;切回master分支出现报错&#xff1a;1.4&#xff09;报错分析 第二章、解决方式2.1&#xff09;方式1&#xff1a;commit2.2&#xf…
最新文章