SpringBoot3基础用法
技术和工具「!喜新厌旧」
一、背景
最近在一个轻量级的服务中,尝试了最新的技术和工具选型;
即SpringBoot3,JDK17,IDEA2023,Navicat16,虽然新的技术和工具都更加强大和高效,但是适应采坑的过程总是枯燥的;
【环境一览】

首先框架主体从SpringBoot2升级到SpringBoot3,Java基础环境从JDK8升级到JDK17;
技术升级都到这步了,自然连带着工具都升级到最新版本了,涉及到的其他组件,也会选择与当前框架适应的版本;
至于为何使用JDK17,因为是SpringBoot3的最低依赖,也和官方的维护周期有关;

实际上如果JDK21已经发布的话,个人更倾于这个版本,要是没有合适的尝试机会,继续使用JDK8也问题不大;
另外开发工具IDEA2021.2版本才开始支持JDK17,所以如果版本过低的话也需要升级,至于Navicat16纯属跟风操作;
二、环境搭建
1、工程结构
在工程结构上没有什么变化,通过maven组件构建项目,对于入门案例来说,注意框架依赖,启动类,配置文件即可;

2、框架依赖
在该工程中只是SpringBoot3框架的简单测试,所以只引入web依赖就足够;
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
至于Spring框架和其他组件的依赖,顺着web依赖追溯即可,核心的依赖和版本都可以找到;

3、环境配置
入门案例,在这里只简单的配置服务器和应用名称;
server:
port: 8082 # 端口号
tomcat: # Tomcat组件
uri-encoding: UTF-8 # URI编码
spring:
application:
name: boot-base
三、入门案例
1、测试接口
提供一个简单的Get请求接口,使用了部分JDK新版的语法,如果抛出异常会统一处理;
@RestController
public class BootBaseWeb {
@GetMapping("/boot/base/{id}")
public Map<String,String> getInfo (@PathVariable String id){
if (id.isBlank() || "0".equals(id)){
throw new RuntimeException("参数ID错误");
}
var dataMap = new HashMap<String,String>();
dataMap.put("id",id);
dataMap.put("boot","base");
return dataMap ;
}
}
2、全局异常
基于注解RestControllerAdvice和ExceptionHandler统一异常处理;
@RestControllerAdvice
public class HandlerExe {
@ExceptionHandler(value = Exception.class)
public Map<String,String> handler02 (HttpServletRequest request, Exception e){
var errorMap = new HashMap<String,String>() ;
errorMap.put("code","500");
errorMap.put("url",request.getRequestURL().toString());
errorMap.put("msg",e.getMessage());
return errorMap ;
}
}
3、日志打印
3.1 日志配置
在application.yml文件中,简单的添加日志配置内容,然后从日志文件或者控制台输出查看相关信息;
logging:
level:
root: info
file:
path: ./
name: logs/${spring.application.name}.log
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} %contextName [%thread] %-5level %logger- %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} %contextName [%thread] %-5level %logger- %msg%n"
logback:
rolling-policy:
max-history: 7
max-file-size: 10MB
total-size-cap: 50MB
3.2 日志打印
虽然采用的是logback组件,但是使用slf4j的API即可;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class BootLogWeb {
private static final Logger LOGGER = LoggerFactory.getLogger(BootBaseWeb.class);
@GetMapping("/boot/print/log")
public String printLog (HttpServletRequest request){
LOGGER.info("remote-host:{}",request.getRemoteHost());
LOGGER.info("request-uri:{}",request.getRequestURI());
return request.getServerName() ;
}
}
四、打包运行
打包代码工程中的m1-01-boot-base子模块,以及其相关的依赖;
mvn clean -pl m1-01-boot-base -am -Dmaven.test.skip=true package
运行m1-01-boot-base.jar服务,并指定相应的端口号为8080,然后测试其中相关接口查看日志即可;
java -jar m1-01-boot-base.jar --server.port=8080
五、参考源码
文档仓库:
https://gitee.com/cicadasmile/butte-java-note
源码仓库:
https://gitee.com/cicadasmile/butte-spring-parent
SpringBoot3基础用法的更多相关文章
- PropertyGrid控件由浅入深(二):基础用法
目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...
- logstash安装与基础用法
若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...
- elasticsearch安装与基础用法
来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...
- BigDecimal最基础用法
BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...
- Vue组件基础用法
前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...
- Smarty基础用法
一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...
- 前端自动化测试神器-Katalon的基础用法
前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...
- Bootstrap fileinput:文件上传插件的基础用法
官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...
- asyncio 基础用法
asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...
- oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)
0 前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...
随机推荐
- 音视频八股文(6)-- ffmpeg大体介绍和内存模型
播放器框架 常用音视频术语 • 容器/文件(Conainer/File):即特定格式的多媒体文件, 比如mp4.flv.mkv等. • 媒体流(Stream):表示时间轴上的一段连续数据,如一 段声音 ...
- Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题
Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题 Prompt工程是一种相对较新的学科,用于开发和优化提示,以有效地使用语言模型(LM ...
- this关键字理解
编译器对对象的加载步骤: (1)类名 (2)成员变量 (3)成员方法 即使定义类时,成员变量写在成员方法后面,加载对象时,也是先加载成员变量 当编译器识别方法时,会对成员方法改写,在所有方法里隐藏一个 ...
- 使用weexplus + vue开发APP的填坑之旅
最近需要撸一个app来满足用户的需求,找来找去发现flutter不错,决定用它但是时间不够(准备挤出时间再去研究flutter),进度又催得紧,最后决定选weex这个上手快些,说干就干打开官网跟着ap ...
- 【技术积累】Java中的JVM【一】
什么是JVM JVM英文全称为Java Virtual Machine,中文意为Java虚拟机.JVM是一种能够执行Java语言编写的程序的虚拟机器,它首次作为Java语言的一部分,后来又被移植到了许 ...
- 【VS Code 与 Qt6】运用事件过滤器批量操作子级组件
如果某个派生自 QObject 的类重写 eventFilter 方法,那它就成了事件过滤器(Event Filter).该方法的声明如下: virtual bool eventFilter(QObj ...
- .NET周报 【6月第2期 2023-06-11】
国内文章 如何计算一个实例占用多少内存? https://www.cnblogs.com/artech/p/size-calculation.html 我们都知道CPU和内存是程序最为重要的两类指标, ...
- CANoe学习笔记(五):Diva自动化测试工程
内容: Diva工程的建立 Diva工程的配置 测试条例选择 一.新建一个Diva工程 左上角选择New,然后配置好下面部分 二.配置Diva工程 1. 2. 3.配置一些时间参数,按需求填写 4.其 ...
- CANoe学习笔记(二):创建第一个事件触发帧(基于LIN)
内容: 创建一个事件触发帧: 包含几个不同无条件帧: 事件触发帧的触发: 事先准备: 创建三个文件夹,用来放不同类型文件: 工程创建 新建一个Lin工程,双击即可,然后命名为LINconf保存. 创建 ...
- zabbix 监控nginx
nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等,可以利用这个功能编写zabbix监控 ...