当前位置: 首页 > news >正文

【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 来处理。


 

相关文章:

【Spring Boot】

目录 🍪1 Spring Boot 的创建 🎂2 简单 Spring Boot 程序 🍰3 Spring Boot 配置文件 🍮3.1 properties 基本语法 🫖3.2 yml 配置文件说明 🍭3.2.1 yml 基本语法 🍩3.3 配置文件里的配置类…...

使用docker 部署自己的chatgpt

直接docker部署 docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEYyour_api_key chenzhaoyu94/chatgpt-web:latestDocker compose部署 version: 3services:app:image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可ports…...

Python适配器模式介绍、使用方法

一、Python适配器模式介绍 适配器模式(Adapter Pattern) 是一种结构型设计模式,用于将不兼容的接口转换为另一种接口,以便系统间的协同工作。 功能: 适配器模式主要功能是将一个类的接口转换成客户端所期望的另一种接口,以满足…...

【数据结构】复杂度

🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、什么是数据结构 二、什么是算法 三、算法的效率 四、时间复杂度 4.…...

【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考

PP-YOLOE: An evolved version of YOLO Abstract 在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResSt…...

微服务入门---SpringCloud(二)

微服务入门---SpringCloud(二) 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置…...

51单片机IO口控制

51单片机IO口控制 1.点亮LED灯 原理:根据电路图,指向IO口的引脚;拉低电平,灯亮、 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…...

ERROR 1064 - You have an error in your SQL syntax;

ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧,以前开始写SQL,特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…...

leetcode做题笔记46

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路一:回溯 void swap(int *nums,int index1,int index2) {int temp nums[index1];nums[index1] nums[index2];nums[index2] temp; }void prem(int* nu…...

快问快答JS面向对象面试题

1、说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用…...

googlenet论文理解

参考文章:https://www.cnblogs.com/czy4869/p/8977788.html 以及下面这篇的前几行让我弄懂了论文里说的稀疏性和计算性能兼顾:参考文章:https://blog.csdn.net/weixin_52121118/article/details/119740279...

OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测

1. 前言 之前把ORT的一套推理环境框架搭好了,在项目中也运行得非常愉快,实现了cpu/gpu,fp32/fp16的推理运算,同onnx通用模型在不同推理框架下的性能差异对比贴一下,记录一下自己对各种推理框架的学习状况 YoloV8模型大小 模型名称参数量NANO3.2M...... 2. CPU篇 CPU推理框架性…...

【QT 网络云盘客户端】——获取用户文件列表信息

目录 1.获取用户文件列表信息分析 2.设置图标属性 3.向服务器获取文件的数量 4.向服务器获取文件信息列表 4.显示图标 1.获取用户文件列表信息分析 1.将QListWidget设置为图标模式 2. 当我们点击"按下载量升序","按下载量降序",“更新” 菜单选项 都会…...

从0到1,无代码开发如何简化产品创新流程

在当今竞争激烈的市场环境中,产品创新已经成为企业成功的关键因素之一。为了在市场上保持竞争力,企业需要不断地推出新产品或改进现有产品。然而,传统的开发流程往往耗时费力,且成本高昂。因此,简化产品创新流程成为了…...

select、epoll 的快速核心理解

一、 select 最low的就是在用户代码中自旋实现所有阻塞socket的监听。但是每次判断socket是否产生数据,都涉及到用户态到内核态的切换。 于是select改进:将fd_set传入内核态,由内核判断是否有数据返回; 然后最low的只能使用自旋…...

HTTP和HTTPS的区别

一、两者概念 1.1 HTTP概念 HTTP 的全称是超文本传输协议(HyperText Transfer Protocol) 是一种用于分布式、协作式和超媒体信息系统的应用协议,简单来说就是一种分布和接收HTML页面的方法,被用于在Web浏览器和网站服务器之间传递…...

分布式异步任务处理组件(二)

一些关键点的设计脑暴记录----very important!!! 首先,任务存储交给kafka,由节点负责写入kafka,acks1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后…...

Jenkins 拉取 GitHub 私有仓库失败问题

添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里...

小程序 多层次对象数组的赋值、动态赋值

1、给对象赋值 data: {form: {Name: ,IDCard: ,Sex: ,}},对单个属性赋值 this.setData({form.Name:章三,[form.Sex]:女,}) 动态赋值 onChangeDate(e) {let field e.currentTarget.dataset.field;this.setData({[form.${field}]: e.detail.data})}, field 是wxml上通过dat…...

angular踩坑

1 新版路由守卫由于canActivate已被废弃,采用函数函数,但其参数中无法像类一样进行路由对象注入,如何实现路由首位中的页面跳转? import { CanActivateFn,Router,ActivatedRouteSnapshot, RouterStateSnapshot,} from angular/ro…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Spring Boot面试题精选汇总

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...