SpringBoot3基础用法

打印 上一主题 下一主题

主题 871|帖子 871|积分 2615

目录

技术和工具「!喜新厌旧」
一、背景

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

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

实际上如果JDK21已经发布的话,个人更倾于这个版本,要是没有合适的尝试机会,继续使用JDK8也问题不大;
另外开发工具IDEA2021.2版本才开始支持JDK17,所以如果版本过低的话也需要升级,至于Navicat16纯属跟风操作;
二、环境搭建

1、工程结构

在工程结构上没有什么变化,通过maven组件构建项目,对于入门案例来说,注意框架依赖,启动类,配置文件即可;

2、框架依赖

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

3、环境配置

入门案例,在这里只简单的配置服务器和应用名称;
  1. server:
  2.   port: 8082                # 端口号
  3.   tomcat:                   # Tomcat组件
  4.     uri-encoding: UTF-8     # URI编码
  5. spring:
  6.   application:
  7.     name: boot-base
复制代码
三、入门案例

1、测试接口

提供一个简单的Get请求接口,使用了部分JDK新版的语法,如果抛出异常会统一处理;
  1. @RestController
  2. public class BootBaseWeb {
  3.     @GetMapping("/boot/base/{id}")
  4.     public Map<String,String> getInfo (@PathVariable String id){
  5.         if (id.isBlank() || "0".equals(id)){
  6.             throw new RuntimeException("参数ID错误");
  7.         }
  8.         var dataMap = new HashMap<String,String>();
  9.         dataMap.put("id",id);
  10.         dataMap.put("boot","base");
  11.         return dataMap ;
  12.     }
  13. }
复制代码
2、全局异常

基于注解RestControllerAdvice和ExceptionHandler统一异常处理;
  1. @RestControllerAdvice
  2. public class HandlerExe {
  3.     @ExceptionHandler(value = Exception.class)
  4.     public Map<String,String> handler02 (HttpServletRequest request, Exception e){
  5.         var errorMap = new HashMap<String,String>() ;
  6.         errorMap.put("code","500");
  7.         errorMap.put("url",request.getRequestURL().toString());
  8.         errorMap.put("msg",e.getMessage());
  9.         return errorMap ;
  10.     }
  11. }
复制代码
3、日志打印

3.1 日志配置

在application.yml文件中,简单的添加日志配置内容,然后从日志文件或者控制台输出查看相关信息;
  1. logging:
  2.   level:
  3.     root: info
  4.   file:
  5.     path: ./
  6.     name: logs/${spring.application.name}.log
  7.   pattern:
  8.     console: "%d{yyyy-MM-dd HH:mm:ss} %contextName [%thread] %-5level %logger- %msg%n"
  9.     file: "%d{yyyy-MM-dd HH:mm:ss} %contextName [%thread] %-5level %logger- %msg%n"
  10.   logback:
  11.     rolling-policy:
  12.       max-history: 7
  13.       max-file-size: 10MB
  14.       total-size-cap: 50MB
复制代码
3.2 日志打印

虽然采用的是logback组件,但是使用slf4j的API即可;
  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. @RestController
  4. public class BootLogWeb {
  5.     private static final Logger LOGGER = LoggerFactory.getLogger(BootBaseWeb.class);
  6.     @GetMapping("/boot/print/log")
  7.     public String printLog (HttpServletRequest request){
  8.         LOGGER.info("remote-host:{}",request.getRemoteHost());
  9.         LOGGER.info("request-uri:{}",request.getRequestURI());
  10.         return request.getServerName() ;
  11.     }
  12. }
复制代码
四、打包运行

打包代码工程中的m1-01-boot-base子模块,以及其相关的依赖;
  1. mvn clean -pl m1-01-boot-base -am -Dmaven.test.skip=true package
复制代码
运行m1-01-boot-base.jar服务,并指定相应的端口号为8080,然后测试其中相关接口查看日志即可;
  1. java -jar m1-01-boot-base.jar --server.port=8080
复制代码
五、参考源码
  1. 文档仓库:
  2. https://gitee.com/cicadasmile/butte-java-note
  3. 源码仓库:
  4. https://gitee.com/cicadasmile/butte-spring-parent
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表