【Spring Boot】

目录

🍪1 Spring Boot 的创建

🎂2 简单 Spring Boot 程序

🍰3 Spring Boot 配置文件

🍮3.1 properties 基本语法

🫖3.2 yml 配置文件说明

🍭3.2.1 yml 基本语法

🍩3.3 配置文件里的配置类型分类

🍝3.4 不同配置环境下的配置文件

🥣4 Spring Boot 打印日志

🥢4.1 默认打印的日志 

🍉4.2 自定义打印日志

🍈4.3 给某个文件夹单独设置日志级别

🥝4.4 日志持久化

🥥4.5 设置日志的时间打印格式

🍇5 lombok

🥤5.1 前置工作

🍴5.2 使用 lombok 更加简单地输出日志


Spring Boot 是 Spring 的脚手架,是专门为了快速开发 Spring 框架而诞生的。

1 Spring Boot 的创建

类要与启动类放在一起

2 简单 Spring Boot 程序

以前的 Spring 只是一个普通的 Java 项目,没有办法直接与浏览器进行互动,而如今可以使用 Spring Boot 来实现浏览器和用户的交互。

package com.example.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {@RequestMapping("/sayhi")public String sayHi(){return "Hi, Spring Boot.";}
}

在网址输入:

http://localhost:8080/user/sayhi 

 需要注意的是,需要将该类和启动类放置到同级目录下。

 

Spring Boot 具备以下优点:

1. 快速集成框架,Spring Boot 在创建时就可以添加依赖

2. 内置运行容器,无需配置 Tomcat 等 Web 容器,可以直接运行和部署程序

3. 快速部署项目,无需外部容器即可启动并运行项目

4. 抛弃繁琐的 XML ,使用注解和配置的方式进行开发

Spring Boot 的设计思想是约定大于配置。类上标注着 @SpringBootApplication 就可以启动 Spring Boot 项目了。

 

3 Spring Boot 配置文件

Spring Boot 里有两种配置文件:

application.properties,是创建 Spring Boot 项目时默认的文件格式

application.yml,需要用户自己来创建,属于新版的配置文件

特殊说明:

1. 如果 properties 和 yml 一起存在于同一个项目中,如果两个配置文件出现了同样的配置,都配置了 server.port,properties 是 8081,而 yml 设置成 8089,那么会以 properties 中的配置为主,也就是说,properties 配置文件的优先级更高。

2. 理论上两种配置文件可以共存,但在实际工作中,还是会选择其中一种配置文件,为了以后更好地维护。

3.1 properties 基本语法

properties 以键值对的形式书写,key 和 value 之间以 “=”连接的。如:

# 配置项目端口号
server.port=8089

小技巧:配置文件中使用 # 来添加注释信息

 properties 会出现中文乱码问题,需要手动设置一下:

Settings 以及 New Projects Setup 中勾选如下:

 

这种语法格式也就意味着,properties 配置文件中会产生冗余的代码,比如:

# MySQL 配置项
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myblog
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

同样的功能,换了 yml 配置文件会如何呢?且看下一小节内容。

3.2 yml 配置文件说明

yml 是 YAML 的缩写,全称为 Yet Another Markup Language,其中文就是 “另一种标记语言”。

yml 优点分析:

1. 可读性高,写法简单,语法与 JSON 语言类似

2. 支持更多的数据类型

3. 支持更多编程语言,Java、Golang、PHP、Python、Ruby、JavaScript、Perl 中

3.2.1 yml 基本语法

yml 是树形结构的配置文件,基础语法是 key: value,注意 key 和 value 之间使用英文冒号加空格的方式组成,其中的空格不可以省略。

# 使用 yml 连接数据库
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/myblogusername: rootpassword: 123456

3.3 配置文件里的配置类型分类

配置类型分类:

1. 系统配置项,给系统(框架)使用的,比如 server.port

2. 用户自定义配置,开发者自己使用,如 myImage.path

 那对于用户自定义配置,用户该如何读取呢?

在项目中想要读取配置文件中的内容,可以使用 @Value 注解来实现。

@Value 注解使用 "${}" 的格式来读取,见如下代码:

# 用户自定义配置项
myImage.path=d:\\image\\
package com.example.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;@RestController
public class TestController {@Value("${myImage.path}")private String myImage;@RequestMapping("/sayhi")public String sayHi(){System.out.println(LocalDateTime.now() + "日志"+ "com.example.demo.TestController");return "你好,Spring Boot ->" + myImage;}
}

3.4 不同配置环境下的配置文件

# 指定配置文件的运行环境
spring.profiles.active=test

 

4 Spring Boot 打印日志

日志级别:

trace:日志级别最低

debug:调试日志级别

info:普通日志级别

warn:警告日志级别

error:错误日志级别

fatal:致命日志级别,只有系统在崩溃时才会输出的日志级别,级别最高

  

日志级别作用:过滤星系,将业务不需要的日志屏蔽掉

问题:Spring Boot 如何打印日志?

Spring Boot 内置了两个日志框架:SLF4J + LogBack

SLF4J 是让开发者使用和调用的框架,而 LogBack 是最底层实现日志相关操作的框架

4.1 默认打印的日志 

从左到右依次是:

日志发生的时间,日志级别,打印日志的线程 id,打印日志线程名称,日志打印的位置(包名+类名)以及日志内容

4.2 自定义打印日志

通过日志工程得到日志对象 -> 通过日志对象提供的打印方法来实现打印

package com.example.demo;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);@RequestMapping("/log")public void log(){String msg = "今天周五,没有刮台风的一天";log.trace("trace -> " + msg);log.debug("debug -> " + msg);log.info("info -> " + msg);log.warn("warn -> " + msg);log.error("error -> " + msg);}
}

 

4.3 给某个文件夹单独设置日志级别

# 当前项目默认的日志级别
logging.level.root=info# 给 Controller 这个文件夹单独设置日志级别
logging.level.com.example.demo.Controller=debug

4.4 日志持久化

Spring Boot 还支持将日志保存到磁盘中。

# 设置日志的保存路径
logging.file.path=C:\\image\\# 设置日志的保存文件名
logging.file.name=C:\\image\\springboot.log

日志的添加方式不是覆盖,而是叠加。

4.5 设置日志的时间打印格式

# 设置日志时间的打印格式
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss

5 lombok

5.1 前置工作

安装一个 lombok 插件

在项目中添加 lombok 依赖 

之后便可以使用 lombok 来编写代码了。

5.2 使用 lombok 更加简单地输出日志

package com.example.demo;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@Slf4j
public class LogController2 {@RequestMapping("/log2")public void log2() {String msg = "今天周五,没有刮台风的一天";log.trace("trace -> " + msg);log.debug("debug -> " + msg);log.info("info -> " + msg);log.warn("warn -> " + msg);log.error("error -> " + msg);}
}
@SLF4J 
// 等同于以下代码 
private static Logger log = LoggerFactory.getLogger(LogController.class);

Lombok 实现的原理:在代码编译期(.java 文件)时,将 lombok 的注解转换成相应的代码,之后再编译成字节码文件(.class),再交由 JVM 来处理。


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将ubuntu LTS升级为Pro

LTS支持周期是5年; Pro支持周期是10年。 Ubuntu Pro专业版笔记 步骤: 打开“软件和更新” 可以看到最右侧的标签是Ubuntu Pro。 在没有升级之前,如果使用下面两步: sudo apt updatesudo apt upgrade 出现如下提示&#xff…

【低代码专题方案】iPaaS运维方案,助力企业集成平台智能化高效运维

01 场景背景 随着IT行业的发展和各家企业IT建设的需要,信息系统移动化、社交化、大数据、系统互联、数据打通等需求不断增多,企业集成平台占据各个企业领域,成为各业务系统数据传输的中枢。 集成平台承接的业务系统越多,集成平台…

【数据结构】时间复杂度和空间复杂度

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 时间复杂度和空间复杂度 前…

diffusion model(五)stable diffusion底层原理(latent diffusion model, LDM)

LDM: 在隐空间用diffusion model合成高质量的图片! [论文地址] High-Resolution Image Synthesis with Latent Diffusion Models [github] https://github.com/compvis/latent-diffusion 文章目录 LDM: 在隐空间用diffusion model合成高质量的图片!系列…

某ERP系统信息泄露登录后台

漏洞描述 某ERP前台泄露了某api接口,恶意攻击者可通过调用该接口,对用户的账号和密码进行非授权访问,在获取到账号和密码后,恶意攻击者可接管后台。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事…

时间复杂度介绍及其计算

时间复杂度 1.算法效率 如何衡量一个算法的好坏呢&#xff1f;看这段代码&#xff1a; long long Fib(int N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); }这是斐波那契数列的递归代码&#xff0c;非常简洁&#xff0c;那么这就一定说明它好吗&#xff1f;答案显而易…

Stable Diffusion - 扩展 SegmentAnything 和 GroundingDINO 实例分割算法 插件的配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131918652 Paper and GitHub&#xff1a; Segment Anything: SAM - Segment Anything GitHub: https://github.com/facebookresearch/s…

【源码解析】SpringBoot循环依赖源码解析II

前言 前面已经写过循环以来的分析&#xff0c;对循环依赖有一些了解&#xff0c;【源码解析】Spring循环依赖和三级缓存。简单回顾一下&#xff1a; Spring可以解决Autowired注入的循环依赖 Spring解决不了构造器注入的循环依赖 使用Aysnc注解会导致循环依赖。提前暴露的Bea…

LeetCode 刷题 数据结构 数组 485 最大连续1的个数

给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &#xff0c;所以最大连续 1 的个数是 3.示例 2: 输入&#xff1a;nums […

C语言中的函数(超详细)

C语言中的函数&#xff08;超详细&#xff09; 一、函数概述二、C语言中函数的分类1.库函数2.自定义函数三、函数的参数1.实际参数&#xff08;实参&#xff09;2.形式参数&#xff08;形参&#xff09;四、函数的调用1.传值调用2.传址调用五、函数的嵌套调用和链式访问1.嵌套调…

大于号在python中怎么打,python大于等于怎么写

大家好&#xff0c;小编为大家解答python中大于并小于一个数代码的问题。很多人还不知道python中大于等于且小于等于&#xff0c;现在让我们一起来看看吧&#xff01; 1、python 中不等于怎么表示 #!/usr/bin/python a1 b2 if ab: print "a 等于 b" if a!b: print &…

【playbook】Ansible的脚本----playbook剧本

Ansible的脚本----playbook剧本 1.playbook剧本组成2.playbook剧本实战演练2.1 实战演练一&#xff1a;给被管理主机安装Apache服务2.2 实战演练二&#xff1a;使用sudo命令将远程主机的普通用户提权为root用户2.3 实战演练三&#xff1a;when条件判断指定的IP地址2.4 实战演练…

图文教程:如何在 3DS Max 中创建3D迷你卡通房屋

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在本教程中&#xff0c;我们将学习如何创建一个有趣的、低多边形的迷你动画房子&#xff0c;你可以在自己的插图或视频游戏项目中使用它。您将学习的一些技能将包括创建基本的3D形状和基本的建模技术。让我…

IP网络对讲求助模块

SV-6002 IP网络对讲求助模块是一款壁挂式一键求助对讲模块&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;实时解码播放&#xff0c;还配置了麦克风输入和扬声器功放输出。SV-6002模块可实现对讲、广播、等功能&#xff0c;作为网络广播对讲系…

Docker Compose 容器编排 + Docker--harbor私有仓库部署与管理

目录 一、Docker Compose简介 1、Docker Compose 的YAML 文件格式及编写注意事项 2、Docker compose 使用的三个步骤 3、 Docker Compose配置常用字段 4、 Docker Compose 常用命令 5、 Docker Compose 文件结构 二&#xff1a; Docker Compose 安装 1、Docker Compose…

FreeRTOS之互斥量

什么是互斥量&#xff1f; 在多数情况下&#xff0c;互斥型信号量和二值型信号量非常相似&#xff0c;但是从功能上二值型信号量用于同步&#xff0c; 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别&#xff0c;互斥型信号量可以有效解决优先级…

合作客户销售数据可视化分析

以一个案例进行实际分析&#xff1a; 数据来源&#xff1a;【地区数据分析】 以此数据来制作报表。 技巧一&#xff1a;词云图 以城市名称来显示合同金额的分布&#xff0c;合同金额越大&#xff0c;则城市文字显示越大。 技巧二&#xff1a;饼图 下面制定一个&#xff0c;合…

热备份路由协议原理

热备份路由协议原理 HSRP协议/VRRP协议热备份协议 热备份协议&#xff08;Hot Standby Protocol&#xff09; 是一种基于冗余设计的协议&#xff0c;用于提高网络的可靠性和冗余性。它允许多个设备共享同一个IP地址&#xff0c;其中一个设备被选为主设备&#xff0c;其他设备…

Java 源码打包 降低jar大小

这里写目录标题 Idea maven 插件配置pom.xml 配置启动技巧 Idea maven 插件配置 pom.xml 配置 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- 只…

React之生命周期

React之生命周期 旧版本&#xff0c;函数组件是没有生命周期的。新版本中通过useEffect触发函数的生命周期 一、基于类组件的生命周期 React的组件生命周期分为挂载阶段、更新阶段和销毁阶段。因为React的state不具有Vue的响应式&#xff0c;所以并没有create阶段 1、挂载阶段&…