Spring Boot的创建和使用(JavaEE进阶系列2)
目录
前言:
1.什么是Spring Boot?为什么要学习Spring Boot?
2.Spring Boot优点
3.创建Spring Boot项目
3.1准备工作
3.2Spring Boot创建
3.2.1通过idea的方式创建
3.2.2通过网页创建
4.Spring Boot中的配置文件
4.1Spring Boot配置文件的作用
4.2配置文件的格式
4.3 properties VS yml
5.Spring Boot日志文件
5.1日志的作用
5.2日志的用法
5.3自定义日志
4.日志级别
4.1日志级别的作用
4.2日志级别的分类与使用
4.3 日志持久化
4.4更加简单的日志输出--lombok
结束语:
前言:
在上一小节的JavaEE的进阶知识中小编主要是与大家分享了什么是IoC容器,以及依赖注入的五大注解和Bean的使用。那么接下来这一小节中小编将与大家分享一下有关于Spring Boot项目的创建以及使用。
1.什么是Spring Boot?为什么要学习Spring Boot?
Spring 的诞生就是为了简化Java程序的开发,而Spring Boot的诞生是为了简化Spring程序的开发。Spring Boot翻译一下就是Spring手脚架的意思,在盖房子的时候就会使用手脚架来提高盖房子的效率。而Spring Boot就是Spring框架的手脚架,他就是为了快速开发Spring框架诞生的。
2.Spring Boot优点
- 起步依赖(创建的时候可以方便的添加依赖)。
- 内置Tomcat容器。无须配置Tomcat等Web容器,直接运行和部署程序。
- 快速部署,使用jar包加上简单的命令直接运行。
- 抛弃XML的配置方式,使用注解和配置的方式进行开发。
- 支持更多的监控的指标,可以更好的了解项目的运行情况。
3.创建Spring Boot项目
3.1准备工作
在idea中安装插件:
3.2Spring Boot创建
3.2.1通过idea的方式创建
①选择Spring Boot的工程项目进行创建。
②选择下面的选项,点击next。③选择要添加的插件。
④确定存放路径,点击完成进行创建。
⑤创建好之后删除一些无用的目录。
⑥在pom.xml中删除以下后缀内容,并点击侧边的maven进行刷新。
⑦点击主启动类进行启动项目,验证项目创建是否正确。
Spring Boot目录工程详解:
快速添加依赖的方法:
①安装插件。
②右键点击Generator,点击Edit Starters,然后寻找你想要的插件。
③点击maven的刷新按钮,进行刷新。
配置文件中的配置类型分类:
- 系统配置项 ex:server.port,它是给系统(框架)使用的。
- 用户自定义配置ex:myimage.path开发者自己使用。
idea热部署(写完代码不用手动重新启动,新代码可以自动生效)
①添加springboot-dev-tool框架。
②在idea设置中开启项目的自动编译。
3.2.2通过网页创建
我们也可以通过Spring的网页版来创建一个我们想要的项目。网址☞https://start.spring.io/
4.Spring Boot中的配置文件
4.1Spring Boot配置文件的作用
整个项目中所有的数据都是在配置文件中配置的,比如:
- 数据的连接信息(包含用户名和密码的设置)。
- 项目的启动端口。
- 第三方系统的调用密钥等信息。
- 用于发现和定位问题的普通日志和异常日志等。
想象一下如果没有配置信息,那么Spring Boot项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。
4.2配置文件的格式
Spring Boot配置文件主要分为以下两种格式:
- .properties
- .yml
具体的写法请看下面。
properies配置文件:
他是最早期的配置文件格式,也是创建Spring Boot项目默认的配置文件。
properies配置文件的优缺点:
- 优点:配置文件结构清晰:key=value->适合初学者。
- 缺点:写法比较臃肿。
在yml中的MySQL的配置:
yml优点:
- yml是一个可读性高,写法简单,易于理解,它的语法和JSON语言类似。
- yml支持更多的数据类型。
- yml支持更多的编程语言,它不止是Java中可以使用也可以在其他语言中使用。
注意:在书写的时候中间需要有一个空格!!!
特殊说明:
- 理论上properties可以和yml一起存在于一个项目当中,当properties和yml一起存一个项目中时,如果配置文件出现了同样的配置,比如properties和yml中都配置了“server.port”,那么这个时候会以properties中的配置为主,也就是.properties配置文件的优先级最高,但加载完.properties文件之后,也会加载.yml文件的配置信息。
- 虽然理论上来讲.properties可以和.yml文件共存,但实际上的业务当中,我们通常会采取一种同一的配置文件格式,这样可以更好的维护(降低故障率)。
4.3 properties VS yml
- properties是以key=value的形式配置的键值类型的配置文件,而yml使用的是类似JSON格式的树形配置方式进行配置的,yml层级之间使用换行缩进的方式配置,key和value之间使用“:”英文冒号加空格的方式设置,并且空格不可以省略。
- properties为早期并默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题。
- yml通用性更好,支持跟多语言,如Java、Go、Python等,如果是云服务器开发,可以使用一份配置文件作为Java和Go的共同配置文件。
- yml支持更多的数据类型。
5.Spring Boot日志文件
5.1日志的作用
日志是程序的重要组成部分,想象一下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的信息吗?答案当然是否定的。因此日志对于我们来说最重要的用途就是排除和定位问题。
除了发现和定位问题之外,我们还可以通过日志实现以下功能:
- 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
- 记录系统的操作日志,方便数据恢复和定位操作人。
- 记录程序的执行时间,方便为以后优化程序提供数据支持。
5.2日志的用法
Spring Boot项目在启动的时候默认就有日志的输出,如下所示:
以上内容就是Spring Boot输出的控制台日志信息。
Spring Boot默认打印日志格式说明:
通过上述日志信息我们能发现以下三个问题:
- Spring Boot内置了日志框架。
- 默认情况下输出的日志并非是开发者定义和打印的,那么开发者又该怎么打印呢?
- 日志默认是打印在控制台上的,而控制台的日志不是不能被保存的,那么怎么把日志永久的保存下来呢?
下面我们来带着问题一起探讨一下吧!
5.3自定义日志
开发者自定义打印日志的实现步骤:
- 通过日志工程得到日志对象。
- 通过日志对象提供的打印方法实现打印。
①得到日志对象。
②使用日志对象提供API打印日志。
代码展示:
package com.example.demo.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LogController {//1.得到日志对象private static Logger log = LoggerFactory.getLogger(LogController.class);//2.使用日志对象提供的API打印日志@RequestMapping("/log")public void log() {String msg = "我是Spring Boot的日志";log.trace("trace —> " + msg);log.debug("debug —> " + msg);log.info("info —> " + msg);log.warn("warn —> " + msg);log.error("error —> " + msg);}
}
4.日志级别
4.1日志级别的作用
- 日志级别可以帮助你筛选出重要的信息,比如设置日志级别为error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务就可以忽略了,从而节省开发者信息筛选的时间。
- 日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息,而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。
4.2日志级别的分类与使用
日志的级别分为:
- trace:微量,少许的意思,级别最低。
- debug:需要调试时候的关键信息打印。
- info:普通的打印信息(默认日志级别)。
- warn:警告,不影响使用,但需要注意的问题;
- error:错误信息,级别较高的错误日志信息;
- fatal:致命的,因为代码异常导致程序退出执行的事件。
日志的级别顺序:
越往上接收到的消息就越少,如设置了warn就只能收到warn、error、fatal级别的日志。
那么为什么Spring Boot可以打印日志,并设置日志级别?因为在Spring Boot中内置了两个日志框架:SLF4J+LogBack。
给某个文件夹单独设置日志级别:
4.3 日志持久化
日志持久化就是将日志保存到磁盘中,以上我们输出的日志都是在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。
想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件之后Spring Boot就会将控制台的日志写到相应的目录或文件下。
①设置日志保存路径。
②设置日志保存文件名。
4.4更加简单的日志输出--lombok
每次都使用LoggerFactory.getLogger(xxx.class)都很繁琐,而且每一个类我们都需要添加一次,所以这里我们使用Lombok来更加简单的输出。
①添加lombok框架支持。
②使用@slf4j注解输出日志。
Lombok的实现原理:
Lombok在编译时期(.java --> .class) 代码的时候将Lombok的注解,转换成对应的代码。
结束语:
好了这节小编就给大分享到这里啦,希望这节对大家有关于Spring Boot的基础知识的了解有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)
相关文章:
Spring Boot的创建和使用(JavaEE进阶系列2)
目录 前言: 1.什么是Spring Boot?为什么要学习Spring Boot? 2.Spring Boot优点 3.创建Spring Boot项目 3.1准备工作 3.2Spring Boot创建 3.2.1通过idea的方式创建 3.2.2通过网页创建 4.Spring Boot中的配置文件 4.1Spring Boot配置…...
【OLSR路由协议】链路状态路由(OLSR)协议中选择多点中继节点算法研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
双重差分模型(DID)论文写作指南与操作手册
手册链接:双重差分模型(DID)论文写作指南与操作手册https://www.cctalk.com/m/group/90983583?xh_fshareuid60953990 简介: 当前,对于准应届生们来说,毕设季叠加就业季,写作时间显得十分宝贵…...
ping 的工作原理
ping 是一个常用于网络诊断的命令行工具,用于测试两台计算机之间的网络连通性。它的工作原理如下: 发出 ICMP Echo 请求: 当你在终端中运行 ping 命令并指定目标主机的IP地址或域名时,计算机会创建一个特殊的ICMP(In…...
93. 复原 IP 地址
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.24…...
竞赛选题 机器视觉的试卷批改系统 - opencv python 视觉识别
文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…...
第15届蓝桥STEMA测评真题剖析-2023年8月20日Scratch编程中级组
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第155讲。 第15届蓝桥第1次STEMA测评,这是2023年8月20日举办的STEMA,比赛仍然采取线上形式。这…...
html5 checkbox
1 选中状态的设置与获取 (1)获取checkbox是否选中: $("#checkbox").is(":checked");$("#checkbox-id")get(0).checked$(#checkbox-id).attr(checked)(2)设置checkbox是否选中 $("…...
安装matplotlib_
安装pip 安装matplotlib 安装完毕 导入出现bug.........
STM32复习笔记(六):STM32远程升级BootLoader相关
目录 Preface: (一)STM32上电启动流程 (二)BootLoader相关 (三)Clion配置 Preface: 有关STM32的BootLoader主要还是参考了许多大佬的文章,这里只是简单地列举一下&am…...
MASA MAUI iOS 文件下载与断点续传
文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总…...
NPDP产品经理知识(产品创新流程)
1.复习组合管理: 组合管理的目标 > 价值最大化,项目平衡,战略一致,管道平衡(资源需求和供给),盈利充分 (实现财务目标) 产品创新流程就是管理风险的过程。 模糊前端: 产品创新章程:PIC 包…...
Android日常——记一次Android事件分发需求的实现
背景:在一个事件分发复杂的view中,插入一个可点击的控件,且不能影响到本身的事件分发。 尝试: 1.对view本身设置点击事件;由于view整体是交由root view去处理分发,存在滑动、边界处理、调出其他界面等复杂操作。设置点…...
【Python】函数(function)和方法(method)的区别
这里先说结论,为了满足心急的小伙伴:method与function的最大区别就是参数有无进行绑定。 自定义类Test: 首先先来一个自定义类: class Test:def Func_normal(arg):print(Func_normal:,arg)staticmethoddef Func_static(arg):pri…...
linux入门---信号的理解
目录标题 如何理解计算机中的信号如何查看计算机中的信号初步了解信号的保存和发送如何向目标进程发送信号情景一:使用键盘发送信号情景二:系统调用发送信号情景三:硬件异常产生信号情景四:软件条件产生信号 核心转储信号的两个问…...
nn.Linear(d, num_units, bias=True)设置bias和不设置bias有什么区别?
nn.Linear(d, num_units, biasTrue)是PyTorch中定义的一个全连接线性层。其中,d是输入特征的数量,num_units是输出特征的数量,而bias参数决定是否在这个线性变换中添加一个偏置项。 设置biasTrue与biasFalse的区别如下: 数学表示…...
代码随想录 Day10 栈与队列 LeetCode T239 滑动窗口的最大值 T347 前K个高频元素
简要介绍一下单调队列和优先级队列的不同 元素顺序的处理:单调队列中,元素的顺序是单调的,也就是说,队列中的元素按照特定的单调性(递增或递减)排列。这种特性使得单调队列在处理一些问题时非常高效&#…...
vue/自定义指令
需求: 页面有个input元素,现在要鼠标光标聚焦在上面,让每个页面上的标签都可以聚焦光标,比如,从A页面跳转到B页面的时候,我们依然要聚焦。如果要一遍遍地操作dom就会很麻烦。 这个时候,为了方便…...
借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
借用binlog2sql工具轻松解析MySQL的binlog文件 简介依赖配置用户权限选项配置案例:误UPDATE表数据回滚binlog2sql VS mysqlbinlog 看腻文章了就来听听视频演示吧:https://www.bilibili.com/video/BV1Zj411k7VW/ 简介 binlog2sql是美团大众点评开源的一…...
一次解决Pytorch训练时损失和参数出现Nan或者inf的经历
目前在做实验,参考了一个新的网络架构之后发现训练时损失出现Nan,参数了出现了inf的情况,先说说我的排查经历。 首先肯定是打印损失,损失是最容易出现Nan的,有各种原因,网上也有很多解决办法,我…...
【python入门篇】列表简介及操作(2)
列表是什么? 列表是由一系列按特定顺序排列的元素组成。你可以创建包含字母表中的所有字母、数字 0~9 或所有家庭成员的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。列表通常包含多个元素,因此给列表指定一…...
数据结构与算法——19.红黑树
这篇文章我们来讲一下红黑树。 目录 1.概述 1.1红黑树的性质 2.红黑树的实现 3.总结 1.概述 首先,我们来大致了解一下什么是红黑树 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。红黑树具有良好的效率,它可在 O(logN) 时间内完…...
js题解(三)
文章目录 柯里化模块乘法改变上下文 柯里化 已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件: 1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数) 2、调用 a 之后&a…...
CompletableFuture异步回调
CompletableFuture异步回调 CompletableFutureFuture模式CompletableFuture详解1.CompletableFuture的UML类关系2.CompletionStage接口3.使用runAsync和supplyAcync创建子任务4.设置子任务回调钩子5.调用handle()方法统一处理异常和结果6.线程池的使用 异步任务的串行执行thenA…...
Python中匹配模糊的字符串
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如何使用thefuzz 库,它允许我们在python中进行模糊字符串匹配。 此外,我们将学习如何使用process 模块,该模块允许我们在模糊…...
PHP图片文件管理功能系统源码
文件图库管理单PHP源码直接解压就能用,单文件,indexm.php文件可以重新命名,上传到需要访问的目录中, 可以查看目录以及各个文件,图片等和下载及修改管理服务。 源码下载:https://download.csdn.net/downloa…...
(枚举 + 树上倍增)Codeforces Round 900 (Div. 3) G
Problem - G - Codeforces 题意: 思路: 首先,目标值和结点权值是直接联系的,最值不可能直接贪心,一定是考虑去枚举一些东西,依靠这种枚举可以遍历所有的有效情况,思考的方向一定是枚举 如果去…...
websocket逆向【python实现websocket拦截】
python实现websocket拦截 前言一、拦截的优缺点优点:缺点:二、实现方法1.环境配置2.代码三、总结前言 开发者工具F12,筛选ws后,websocket的消息是这样显示的,如何获取这里面的消息呢? 以下是本篇文章正文内容 一、拦截的优缺点 主要讲解一下websocket拦截的实现,现在…...
软件测试自动化的成本效益分析
随着软件测试技术的发展,人们已经从最初的手工测试转变为手工和自动化技术相结合的测试方法。目前,人们更多的是关心自动化测试框架、自动化测试工具以及脚本研究等技术方面,而在软件自动化测试方案的效益分析方面涉及较少。 软件测试的目的是…...
【Java】状态修饰符 final static
目录 final 修饰我们的成员方法、成员变量、类 示例代码: final 修饰的局部变量 示例代码: static 示例代码: static 访问特点: 示例代码: static关键字的用途 示例代码: static 修饰常量 示例…...
做书的网站有哪些内容/seo整站优化方案案例
MVC模式下那些友好,屏蔽具体物理文件的URL让我眼馋,咱也想在WEB FORM项目用上一用。按照指引,添加global.asax,写上路由代码什么的:<% Application Language"C#" %> <% Import Namespace"Syst…...
幼儿园建设网站企业官网/百度搜索推广怎么做
这里有三个数据帧:energy,ScimEn和GDP。在合并energy和ScimEn之前,我尝试打印energy,并且获得了全部227个值。当我尝试打印ScimEn时,我会根据等级(从1到15)获得所有值。但是,一旦我基于国家/地区调用合并功…...
wordpress登录无反应/自媒体135网站免费下载安装
该文章属于《Java并发编程》系列文章,如果想了解更多,请点击《Java并发编程之总目录》 前言 在上篇文章《Java并发编程之锁机制之Lock接口》中,我们已经了解了,Java下整个Lock接口下实现的锁机制是通过AQS(这里我们将AbstractQueu…...
厦门网站关键词优化/保定seo推广公司
什么是spring Spring是java企业级应用的开源开发框架。Spring主要用来开发java应用,但是有些扩展是针对于J2EE平台的web应用。其目的是为了简化java企业级应用开发。 使用Spring框架的好处是什么 轻量:基本的版本大约为2MB控制反转Ioc:spr…...
高性能网站开发/今日最新新闻
所有使用 /proc 的模块应当包含 <linux/proc_fs.h> 来定义正确的函数. 要创建一个只读 /proc 文件, 你的驱动必须实现一个函数来在文件被读时产生数据. 当 某个进程读文件时(使用 read 系统调用), 这个请求通过这个函数到达你的模块. 我们先 看看这个函数并在本章后面讨论…...
全屏网站宽度/图片在线转外链
1)、把<script>标签放在<head>中意味着必须等到全部的js代码都下载解析和执行完成以后,才开始展现页面内容,为避免这个问题一般把js代码全部放在<body>元素内容后面 2)、script标签不带defer和async属性&#…...