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 的自增列需要手动编写. ...
随机推荐
- 2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽
2021-06-27:给定一个正数数组arr,代表若干人的体重.再给定一个正数limit,表示所有船共同拥有的载重量.每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽 ...
- 2021-09-02:IP 到 CIDR。给定起始IP和整数n,返回长度最小的CIDR块。力扣751。比如:ip=255.0.0.7,n=10,输出:[“255.0.0.7/32“,“255.0.0.
2021-09-02:IP 到 CIDR.给定起始IP和整数n,返回长度最小的CIDR块.力扣751.比如:ip=255.0.0.7,n=10,输出:["255.0.0.7/32" ...
- 02-初识Verilog
1.开发环境搭建 需要使用的软件: QuartusII ModelSim Visio Notepad++ 2.初识Verilog 2.1 Verilog HDL简介 Verilog HDL是一种硬件描 ...
- computed与watch监听同一对象的场景
今日项目需要一个详细的权限配置,如:路由权限,页面tabs权限,操作权限:而路由权限大都知道就不赘述,而操作权限这就涉及页面中每个按钮了,这里使用VUEX进行管理 1.配置store store 中 ...
- Java设计模式中的几种常用设计模式总结
一.设计模式概念 1.定义 Java包含23种设计模式,是一套对代码设计经验的总结,被人们反复利用,多人熟知的代码设计方式. 2.目的 为了提高代码的可读性,可扩展性以及代码的复用性,为了解决 ...
- Spectre.Console-处理依赖注入
引言 之前说的做自动记录 Todo 执行过程中消耗的时间的Todo 项目,由于想持续保持程序执行,就放弃了 Spectre.Console.Cli,后来随着命令越来越多,自己处理觉得很是麻烦,想了想要 ...
- 数据治理核心保障数据质量监控开源项目Apache Griffin分享
@ 目录 概述 定义 为何要做数据质量监控 基本概念 特性 架构 安装 Docker部署 Docker 镜像批处理使用 Docker 镜像流处理使用 UI界面操作 概述 定义 Apache Griff ...
- 基于 Web 的 Linux 终端 WebTerminal
有时候用公共电脑,或者在没有安装 putty.xshell 之类的终端的电脑上访问或展示服务器上的一些资料数据,甚至是在运维平台开发中想要嵌入 WebTerminal 功能,于是找到了这个项目--基于 ...
- 读文献先读图——主成分分析 PCA 图
上周五彩斑斓的气泡图 有让你眼花缭乱吗? 本周,化繁为简的PCA图 你值得拥有! 数据分析| 科研制图﹒PCA 图 关键词:主成分分析.降维 1665 年的鼠疫 牛顿停课在家提出了万有引力 ;183 ...
- C++面试八股文:如何在堆上和栈上分配一块内存?
某日二师兄参加XXX科技公司的C++工程师开发岗位6面: 面试官: 如何在堆上申请一块内存? 二师兄:常用的方法有malloc,new等. 面试官:两者有什么区别? 二师兄:malloc是向操作系统申 ...