SpringBoot 3 入门实战:从环境搭建到打包部署
📅 2026/7/24 22:57:59
👁️ 次浏览
一、背景与选型最近在一个轻量级的服务中尝试了最新的技术和工具选型即SpringBoot3JDK17IDEA2023Navicat16虽然新的技术和工具都更加强大和高效但是适应采坑的过程总是枯燥的【环境一览】首先框架主体从SpringBoot2升级到SpringBoot3Java基础环境从JDK8升级到JDK17技术升级都到这步了自然连带着工具都升级到最新版本了涉及到的其他组件也会选择与当前框架适应的版本至于为何使用JDK17因为是SpringBoot3的最低依赖也和官方的维护周期有关实际上如果JDK21已经发布的话个人更倾于这个版本要是没有合适的尝试机会继续使用JDK8也问题不大另外开发工具IDEA2021.2版本才开始支持JDK17所以如果版本过低的话也需要升级至于Navicat16纯属跟风操作二、环境搭建与配置1. 工程结构在工程结构上没有什么变化通过maven组件构建项目对于入门案例来说注意框架依赖启动类配置文件即可2. 框架依赖在该工程中只是SpringBoot3框架的简单测试所以只引入web依赖就足够dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-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 MapString,String getInfo (PathVariable String id){ if (id.isBlank() || 0.equals(id)){ throw new RuntimeException(参数ID错误); } var dataMap new HashMapString,String(); dataMap.put(id,id); dataMap.put(boot,base); return dataMap ; } }2、全局异常基于注解RestControllerAdvice和ExceptionHandler统一异常处理RestControllerAdvice public class HandlerExe { ExceptionHandler(value Exception.class) public MapString,String handler02 (HttpServletRequest request, Exception e){ var errorMap new HashMapString,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 # 设置根日志级别为info可选值trace/debug/info/warn/error 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 # 保留最近7天的历史日志文件 max-file-size: 10MB # 单个日志文件最大10MB超过则滚动创建新文件 total-size-cap: 50MB # 所有日志文件总大小上限为50MB超过则删除最旧文件以上配置在application.properties文件中等效的写法为logging.logback.rolling-policy.max-history7、logging.logback.rolling-policy.max-file-size10MB、logging.logback.rolling-policy.total-size-cap50MB。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.skiptrue package运行m1-01-boot-base.jar服务并指定相应的端口号为8080然后测试其中相关接口查看日志即可java -jar m1-01-boot-base.jar --server.port8080五、参考源码文档仓库 https://gitee.com/cicadasmile/butte-java-note 源码仓库 https://gitee.com/cicadasmile/butte-spring-parent
本文关键词:Geo 黑色科技水光抢说实话,以前我对那些吹得天花乱坠的美容项目,心里是打鼓的。毕竟脸只有一张,试错成本太高。前阵子熬夜赶项目,脸色暗沉得像生锈的铁,朋友推荐我去试试那个很火的 Geo 黑色科技水光抢。我当时第一反应是:又是新词?又是智商税?但看着镜子里…
📅 2026/7/24 22:57:23
在上文中,主要为大家介绍了使用Spring的Scaffolding应用程序,本文将继续讲解CRUD Scaffolding。2. CRUD ScaffoldingScaffolding指的是MyEclipse广泛代码生成功能的超集,从生成一组特定的请求软件组件到生成完全实现的可运行应…
📅 2026/7/24 22:56:59
告别重复操作:BetterGI如何用AI技术解放你的原神游戏时间 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 …
📅 2026/7/24 22:56:59
很好,信息已经足够完整, ego-lite:一个试图终结"AI 抢你标签页"问题的 Chromium 浏览器 文章来源:GitHub — citrolabs/ego-lite README交叉信源:掘金技术文章(ego lite 深度解析)、掘…
📅 2026/7/25 0:03:17
Block Buzz:用 Nostr 协议把 AI Agent 变成真正的队友,而非自动化幽灵 原文来源:GitHub - block/buzz(Jack Dorsey 旗下 Block 公司,2026年7月21日开源发布)定性:早期可用产品(v0.4.…
📅 2026/7/25 0:03:17
一、课题研究背景与意义
随着高校信息化建设不断推进,传统人工选课、线下课程评价的管理模式已无法适配现代化教学管理需求。多数高校现有选课系统功能单一,仅支持课程挑选与课表生成,缺少配套的课程评价、教学反馈、数据统计功能,…
📅 2026/7/25 0:03:17
RabbitMQ 高频面试题(完整详解,后端面试直接背诵)一、基础概念篇1. 什么是消息队列?使用 MQ 有哪些作用?定义:消息队列是进程间 / 服务间异步通信的中间件,生产者发送消息存入队列,消…
📅 2026/7/25 0:03:17
央企程序员AI创业一个月感受
从央企的“铁饭碗”到AI创业的“独木桥”,一个月的时间,像是一场加速版的过山车。央企的稳定、资源、流程,与创业的混乱、迭代、生存,形成了鲜明的对比。这一个月,我学会了用代码快速验证想…
📅 2026/7/25 0:03:17
更多请点击:
https://kaifayun.com
第一章:AI 游戏平衡性分析 现代游戏开发中,AI 不再仅用于控制 NPC 行为,更被深度整合进游戏平衡性调优流程。通过强化学习与对抗性仿真,AI 可以在数百万局对局中自动识别数值失衡点…
📅 2026/7/25 0:02:17
1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…
📅 2026/7/25 0:00:17
1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…
📅 2026/7/25 0:00:17
一、直达船员,预警链路最短营运船舶强制标配 VHF 船载电台,属于驾驶室常态化值守设备;预警语音直接传递至驾驶人员,区别于岸上声光报警(船员经常听不到)、短信 / 小程序(船员极少主动查看&#…
📅 2026/7/25 0:00:17
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/24 1:07:52
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/24 1:07:52
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/24 1:07:52
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/24 7:08:08
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/24 17:08:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/24 5:08:03