技术和工具「!喜新厌旧」

一、背景

最近在一个轻量级的服务中,尝试了最新的技术和工具选型;

SpringBoot3JDK17IDEA2023Navicat16,虽然新的技术和工具都更加强大和高效,但是适应采坑的过程总是枯燥的;

【环境一览】

首先框架主体从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、全局异常

基于注解RestControllerAdviceExceptionHandler统一异常处理;

@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基础用法的更多相关文章

  1. PropertyGrid控件由浅入深(二):基础用法

    目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...

  2. logstash安装与基础用法

    若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...

  3. elasticsearch安装与基础用法

    来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...

  4. BigDecimal最基础用法

    BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...

  5. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  6. Smarty基础用法

    一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...

  7. 前端自动化测试神器-Katalon的基础用法

    前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...

  8. Bootstrap fileinput:文件上传插件的基础用法

    官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...

  9. asyncio 基础用法

    asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...

  10. oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)

    0   前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...

随机推荐

  1. 2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽

    2021-06-27:给定一个正数数组arr,代表若干人的体重.再给定一个正数limit,表示所有船共同拥有的载重量.每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽 ...

  2. 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" ...

  3. 02-初识Verilog

    1.开发环境搭建 需要使用的软件: QuartusII ModelSim Visio Notepad++ 2.初识Verilog 2.1 Verilog HDL简介 Verilog HDL是一种硬件描 ...

  4. computed与watch监听同一对象的场景

    今日项目需要一个详细的权限配置,如:路由权限,页面tabs权限,操作权限:而路由权限大都知道就不赘述,而操作权限这就涉及页面中每个按钮了,这里使用VUEX进行管理 1.配置store store 中 ...

  5. Java设计模式中的几种常用设计模式总结

    一.设计模式概念 1.定义 ​ Java包含23种设计模式,是一套对代码设计经验的总结,被人们反复利用,多人熟知的代码设计方式. 2.目的 ​ 为了提高代码的可读性,可扩展性以及代码的复用性,为了解决 ...

  6. Spectre.Console-处理依赖注入

    引言 之前说的做自动记录 Todo 执行过程中消耗的时间的Todo 项目,由于想持续保持程序执行,就放弃了 Spectre.Console.Cli,后来随着命令越来越多,自己处理觉得很是麻烦,想了想要 ...

  7. 数据治理核心保障数据质量监控开源项目Apache Griffin分享

    @ 目录 概述 定义 为何要做数据质量监控 基本概念 特性 架构 安装 Docker部署 Docker 镜像批处理使用 Docker 镜像流处理使用 UI界面操作 概述 定义 Apache Griff ...

  8. 基于 Web 的 Linux 终端 WebTerminal

    有时候用公共电脑,或者在没有安装 putty.xshell 之类的终端的电脑上访问或展示服务器上的一些资料数据,甚至是在运维平台开发中想要嵌入 WebTerminal 功能,于是找到了这个项目--基于 ...

  9. 读文献先读图——主成分分析 PCA 图

    上周五彩斑斓的气泡图 有让你眼花缭乱吗? 本周,化繁为简的PCA图 你值得拥有!  数据分析| 科研制图﹒PCA 图 关键词:主成分分析.降维 1665 年的鼠疫 牛顿停课在家提出了万有引力 ;183 ...

  10. C++面试八股文:如何在堆上和栈上分配一块内存?

    某日二师兄参加XXX科技公司的C++工程师开发岗位6面: 面试官: 如何在堆上申请一块内存? 二师兄:常用的方法有malloc,new等. 面试官:两者有什么区别? 二师兄:malloc是向操作系统申 ...