当前位置: 首页 > article >正文

SpringBoot快速入门指南

Spring Boot 是一个基于 Spring 框架的“约定优于配置”的快速应用开发框架旨在简化基于 Spring 的应用初始搭建和开发过程。它通过自动配置、起步依赖和嵌入式容器等特性使开发者能够快速创建独立的、生产级别的 Spring 应用程序。一、 核心特性与快速启动Spring Boot 的核心设计哲学是减少开发者的配置工作其关键特性如下特性说明示例/作用自动配置根据项目类路径下的 jar 包依赖自动配置 Spring 应用。添加spring-boot-starter-web依赖后自动配置 Tomcat 和 Spring MVC。起步依赖一组预定义的依赖描述符简化 Maven/Gradle 配置。spring-boot-starter-data-jpa包含了 JPA、Hibernate 和数据源等常用依赖。嵌入式容器内置 Tomcat、Jetty 或 Undertow 服务器应用可打包为可执行的 JAR 文件直接运行。无需部署 WAR 包到外部 Tomcat通过java -jar app.jar即可启动。生产就绪特性提供健康检查、指标、外部化配置等生产环境监控和管理功能。通过/actuator/health端点查看应用健康状态。无代码生成与 XML 配置提倡使用 Java 配置和注解无需代码生成也无需繁琐的 XML 配置。使用SpringBootApplication注解主类。一个最简单的 Spring Boot 应用仅需一个主类// 主启动类 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; SpringBootApplication // 核心注解组合了 Configuration, EnableAutoConfiguration, ComponentScan RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); // 启动嵌入式容器和应用 } GetMapping(/hello) public String hello() { return Hello, Spring Boot!; } }对应的pom.xml依赖parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.1.5/version !-- 使用最新稳定版 -- /parent dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId !-- 包含Web MVC和嵌入式Tomcat -- /dependency /dependencies运行主类后访问http://localhost:8080/hello即可得到响应。二、 配置管理详解Spring Boot 支持灵活的外部化配置优先级从高到低为命令行参数 Java 系统属性 操作系统环境变量 应用外的配置文件 应用内的配置文件。1. 配置文件格式application.properties键值对格式。server.port9090 spring.datasource.urljdbc:mysql://localhost:3306/mydbapplication.yml层次化结构更简洁推荐。server: port: 9090 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: secret jpa: hibernate: ddl-auto: update show-sql: true logging: level: org.springframework.web: DEBUG com.example: INFO2. 多环境配置Profile这是管理开发、测试、生产等不同环境配置的核心机制。定义 Profile 特定文件创建如application-dev.yml、application-prod.yml的文件。激活 Profile在通用application.yml中指定spring: profiles: active: dev通过命令行参数java -jar app.jar --spring.profiles.activeprod通过环境变量export SPRING_PROFILES_ACTIVEprod代码中获取配置import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RestController; RestController public class ConfigController { Value(${server.port}) // 注入单个属性 private String serverPort; // 或者使用 ConfigurationProperties 绑定一组属性到一个Bean }Profile 特定的 BeanConfiguration public class DataSourceConfig { Bean Profile(dev) // 仅在 dev 环境下生效 public DataSource devDataSource() { return DataSourceBuilder.create() .url(jdbc:h2:mem:testdb) .driverClassName(org.h2.Driver) .username(sa) .build(); } Bean Profile(prod) public DataSource prodDataSource() { // 配置生产环境数据源 } }三、 日志配置与管理Spring Boot 默认使用 Logback 作为日志框架并提供了统一的抽象层使得配置和管理变得简单。1. 基础配置在application.yml中可以直接配置日志级别和输出。logging: level: root: INFO org.springframework.web: DEBUG com.example.myapp: TRACE file: name: logs/myapp.log # 输出到文件 pattern: console: %d{yyyy-MM-dd HH:mm:ss} - %msg%n # 控制台输出格式2. 高级定制Logback对于更复杂的需求如按文件大小/时间滚动归档、异步日志等可以创建logback-spring.xml文件。?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod30 seconds !-- 定义控制台输出 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender !-- 定义滚动文件输出 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender filelogs/app.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePatternlogs/app.%d{yyyy-MM-dd}.%i.log.gz/fileNamePattern maxHistory30/maxHistory !-- 保留30天 -- timeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATP maxFileSize100MB/maxFileSize !-- 单个文件最大100MB -- /timeBasedFileNamingAndTriggeringPolicy /rollingPolicy encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender !-- 异步日志提升性能 -- appender nameASYNC_FILE classch.qos.logback.classic.AsyncAppender queueSize512/queueSize discardingThreshold0/discardingThreshold appender-ref refFILE / /appender !-- Profile 特定的日志配置 -- springProfile namedev root levelDEBUG appender-ref refCONSOLE / /root /springProfile springProfile nameprod root levelINFO appender-ref refASYNC_FILE / /root /springProfile /configuration3. 在代码中使用日志import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RestController; RestController public class MyController { private static final Logger log LoggerFactory.getLogger(MyController.class); public void someMethod() { log.trace(This is a TRACE message.); log.debug(This is a DEBUG message.); log.info(This is an INFO message. User ID: {}, userId); // 使用占位符避免字符串拼接开销 log.warn(This is a WARN message.); log.error(This is an ERROR message., exception); // 记录异常堆栈 } }四、 与 Spring Cloud 集成构建微服务Spring Boot 是 Spring Cloud 微服务架构的基础。Spring Cloud 基于 Boot 提供了服务发现、配置中心、负载均衡、断路器等分布式系统常见模式的实现。一个简单的微服务示例服务提供者与消费者服务提供者 (Provider Service)添加依赖dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-eureka-client/artifactId /dependency配置文件application.yml:server: port: 8081 spring: application: name: user-service # 服务名称用于服务发现 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ # Eureka Server地址提供一个 REST 端点RestController RequestMapping(/users) public class UserController { GetMapping(/{id}) public User getUser(PathVariable Long id) { return new User(id, Alice); } }服务消费者 (Consumer Service)同样添加 Eureka Client 依赖。使用RestTemplate或OpenFeign进行服务调用。// 使用 LoadBalanced RestTemplate Bean LoadBalanced // 开启客户端负载均衡 public RestTemplate restTemplate() { return new RestTemplate(); } RestController public class OrderController { Autowired private RestTemplate restTemplate; GetMapping(/order/{userId}) public Order getOrder(PathVariable Long userId) { // 通过服务名调用而非具体IP和端口 User user restTemplate.getForObject(http://user-service/users/{id}, User.class, userId); return new Order(1L, user); } } // 使用 Feign (声明式HTTP客户端) FeignClient(name user-service) public interface UserServiceClient { GetMapping(/users/{id}) User getUser(PathVariable Long id); }五、 常见问题与解决方案端口冲突问题启动时报Port 8080 already in use。解决在application.yml中修改server.port或通过命令行指定java -jar app.jar --server.port8081。自动配置失败问题期望的 Bean 没有自动创建如数据源。解决检查依赖是否正确引入如spring-boot-starter-data-jpa。检查配置属性是否正确如spring.datasource.url。使用SpringBootApplication(exclude {SomeAutoConfiguration.class})排除特定自动配置。查看/actuator/conditions端点需引入spring-boot-starter-actuator了解自动配置的匹配情况。多环境配置不生效问题application-{profile}.yml中的配置未加载。解决确认激活 Profile 的方式正确并检查配置文件名拼写。使用Profile注解的 Bean 需确保在对应的 Profile 下才会被创建。日志文件不生成或乱码问题配置了logging.file.name但未生成文件或日志内容乱码。解决确保应用对目标目录有写权限。在 Logback 配置文件中指定编码格式charsetUTF-8/charset。检查 IDE 或终端控制台的字符编码设置。与旧项目如 SSM整合问题问题在 Spring Boot 中使用 MyBatis 等非 JPA 框架或整合旧的 XML 配置。解决MyBatis 整合添加mybatis-spring-boot-starter依赖在配置文件中指定mybatis.mapper-locationsMapper XML 位置。导入 XML 配置在主类或配置类上使用ImportResource(locations {classpath:spring-*.xml})注解。应用性能监控与优化问题如何监控生产环境应用状态和性能。解决引入spring-boot-starter-actuator暴露健康检查、指标、线程 dump 等端点。集成 Micrometer 和 Prometheus、Grafana 等构建可视化监控面板。对于数据库访问慢的问题开启spring.jpa.show-sqltrue查看 SQL或使用 P6Spy 等工具进行 SQL 分析。Spring Boot 通过其强大的自动配置和起步依赖机制极大地简化了 Spring 应用的开发、部署和运维。掌握其配置管理尤其是 Profile、日志框架集成以及与 Spring Cloud 的微服务生态协作是构建现代化、可维护的 Java 后端服务的关键。参考来源什么是 Spring Profiles 以及如何在 Spring Boot 中使用配置与实践指南Spring Boot与Logback整合详解Java Spring Cloud框架使用及常见问题SSM框架与Spring Boot整合实战指南Spring Boot日志配置与管理从入门到精通Spring Boot 框架

相关文章:

SpringBoot快速入门指南

Spring Boot 是一个基于 Spring 框架的“约定优于配置”的快速应用开发框架,旨在简化基于 Spring 的应用初始搭建和开发过程。它通过自动配置、起步依赖和嵌入式容器等特性,使开发者能够快速创建独立的、生产级别的 Spring 应用程序。 一、 核心特性与快…...

本地优先 Web 应用开发:React/SQLite 前端、Supabase 后端与 PowerSync 同步引擎实践

本地优先 Web 应用开发:React/SQLite 前端、Supabase 后端与 PowerSync 同步引擎的实践与优势并非每天都会出现全新架构,如今浏览器内的 SQLite 结合响应式 SQL 和自动同步功能出现了,它能让前端即时交互,还能保持与后端数据一致&…...

结构函数:电子封装热分析的关键技术解析

1. 结构函数:热分析领域的核心桥梁在电子封装设计与散热方案开发中,热特性分析一直是个令人头疼的问题。想象一下,你手里拿着一块正在发烫的芯片,却无法直接"看到"热量是如何在内部传递的——这就像医生无法用X光检查病…...

Next.js App Router 实战:从官方 Playground 探索现代 Web 开发最佳实践

1. 项目概述与定位最近在捣鼓 Next.js 的几个新特性,比如 Server Actions、并行路由、拦截路由这些,光看文档总觉得隔靴搔痒,想找个能上手实操、快速验证想法的环境。这时候,Vercel 官方维护的next-app-router-playground项目就成…...

CAPL脚本中数据类型转换的实战解析:ASCII数组与字符串的精准互转

1. 为什么需要ASCII数组与字符串互转 在汽车电子测试领域,我们经常需要处理各种数据格式的转换。比如ECU返回的报文可能是以ASCII数组形式呈现的,而我们需要将其转换为可读的字符串进行分析;反过来,当我们需要发送特定指令时&…...

repo2txt:从Git仓库到结构化文本的自动化提取工具详解

1. 项目概述:从代码仓库到纯文本的自动化提取最近在整理个人技术笔记和搭建内部知识库时,我遇到了一个挺普遍但有点烦人的问题:如何把分散在多个Git仓库里的代码、文档和配置文件,快速、完整地转换成结构清晰的纯文本文件&#xf…...

GitHub Explorer:基于OpenClaw的AI Agent自动化项目分析工具

1. 项目概述:一个为AI Agent打造的GitHub项目深度分析工具 如果你和我一样,经常需要快速评估一个GitHub项目的价值、技术栈、社区活跃度以及它在整个生态中的位置,那你一定知道这个过程有多繁琐。你得手动点开仓库,看README&…...

LLM长文本处理实战:模块化分割策略与向量化预处理指南

1. 项目概述:一个为LLM打造的文本处理中心如果你和我一样,经常和大型语言模型打交道,无论是用它来总结文档、分析代码,还是处理客服对话,那你肯定遇到过这个痛点:喂给模型的文本太长了怎么办?模…...

Agent Skill Exchange:标准化AI技能库,赋能智能编程助手

1. 项目概述:Agent Skill Exchange 是什么,以及它为何重要 如果你最近在折腾 Claude Code、Cursor 或者 Codex 这类 AI 编程助手,可能会发现一个痛点:虽然它们很强大,但要让它们真正理解并调用你项目里特定的工具链、…...

如何一次性解决Windows系统DLL缺失问题:VisualCppRedist AIO终极指南

如何一次性解决Windows系统DLL缺失问题:VisualCppRedist AIO终极指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在安装新游戏或软件时…...

鸣潮帧率解锁终极指南:用WaveTools轻松突破120FPS限制

鸣潮帧率解锁终极指南:用WaveTools轻松突破120FPS限制 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为鸣潮游戏中被锁定的60FPS帧率而烦恼吗?想让你的高刷新率显示器发挥真正…...

一键部署Obsidian环境:自动化脚本实现跨设备配置同步

1. 项目概述:为什么我们需要一个“一键式”的 Obsidian 安装脚本?如果你是一个深度依赖 Obsidian 进行知识管理、笔记写作或项目规划的从业者,无论是程序员、作家、学生还是研究员,大概率都经历过这样的场景:换了一台新…...

基于agent-foundry框架构建智能体:从核心原理到天气助手实战

1. 项目概述:从零构建你的智能体开发框架最近在GitHub上看到一个挺有意思的项目,叫hebertzhu/agent-foundry。乍一看名字,你可能会觉得这又是一个跟风大语言模型热潮的“又一个Agent框架”。但当我真正深入去研究它的代码结构、设计理念和实际…...

AI辅助开发工作流:用免费代理优化付费工具,提升代码生成效率

1. 项目概述:用免费AI代理优化付费AI工具的开发工作流如果你和我一样,订阅了Claude Pro或者GitHub Copilot,但每个月看着额度条飞速见底,心里总有点发慌,那这篇文章就是为你准备的。我们不是在讨论哪个AI写代码更强&am…...

告别生产翻车!用Altium Designer 21的DRC规则为你的PCB设计上好“保险”

Altium Designer 21 DRC规则深度实战:从设计规范到生产就绪的PCB 在硬件开发领域,PCB设计完成后到实际生产前的最后一道防线就是设计规则检查(DRC)。很多工程师将DRC视为简单的软件功能验证,但实际上,它承担…...

vibe-to-ui:让AI助手将你的“感觉”翻译成专业设计系统

1. 项目概述:当“感觉”成为设计语言如果你和我一样,是一个能写出复杂业务逻辑,但一碰到UI设计就头疼的开发者,那今天聊的这个工具,可能会彻底改变你的工作流。我们常常陷入一个困境:心里有一个模糊的“感觉…...

从零构建ESP32+ILI9341触摸屏LVGL交互界面实战

1. 硬件选型与连接指南 第一次接触ESP32和ILI9341触摸屏时,最让我头疼的就是如何正确选择硬件并完成连接。经过多次实践,我总结出一套适合新手的硬件配置方案。ESP32开发板建议选择带有USB转串口芯片的版本,比如ESP32-DevKitC,这样…...

泰拉瑞亚地图编辑器TEdit:5步打造专业级游戏世界的终极指南

泰拉瑞亚地图编辑器TEdit:5步打造专业级游戏世界的终极指南 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets y…...

5分钟快速上手:XUnity.AutoTranslator游戏翻译插件完整教程

5分钟快速上手:XUnity.AutoTranslator游戏翻译插件完整教程 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏的语言障碍而烦恼吗?XUnity.AutoTranslator是一款强大的…...

Windows平台APK部署技术探索:轻量级安卓应用安装实践指南

Windows平台APK部署技术探索:轻量级安卓应用安装实践指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在跨平台应用开发与部署日益普及的今天&#xff0…...

不止是画框!深入理解Cadence Allegro中Route Keepout与Route Keepin的实战区别

不止是画框!深入理解Cadence Allegro中Route Keepout与Route Keepin的实战区别 在PCB设计领域,约束管理系统的精准运用往往决定着设计成败。对于使用Cadence Allegro的工程师而言,Route Keepout(禁止布线区)和Route Ke…...

5个场景告诉你:为什么你需要这款免费的窗口分辨率神器

5个场景告诉你:为什么你需要这款免费的窗口分辨率神器 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾遇到过这些困扰?游戏内分辨率选项有限,无法满足你对极致画质的…...

在Windows上直接安装Android应用的革命性方案:APK安装器完全指南

在Windows上直接安装Android应用的革命性方案:APK安装器完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经希望在Windows电脑上直接运行手…...

【统计推断实战】从置信区间到假设检验:如何用数据做出可靠决策

1. 从产品迭代案例看统计推断的价值 最近团队上线了一个新功能,产品经理信心满满地宣称能提升15%的用户留存率。但上线一周后数据波动很大,有人觉得效果明显,有人却说毫无变化。这时候该信谁的?其实这就是统计推断大显身手的时刻—…...

如何免费实现iOS设备虚拟定位?iFakeLocation跨平台实用指南

如何免费实现iOS设备虚拟定位?iFakeLocation跨平台实用指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 你是否曾经想过,在舒适…...

Windows系统优化神器:3步解决C盘爆红和电脑卡顿难题

Windows系统优化神器:3步解决C盘爆红和电脑卡顿难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾经遇到过Windows电脑C盘空间不足的困扰&a…...

React Native Expo样板项目:集成导航、状态管理与样式的最佳实践

1. 项目概述:一个为React Native开发者准备的“开箱即用”脚手架 如果你是一名React Native开发者,或者正打算踏入这个领域,那么你一定对项目启动初期那些繁琐的配置工作深有体会。从搭建开发环境、配置路由、集成状态管理,到设置…...

Bootstrap 标签页

Bootstrap 标签页 Bootstrap 标签页(Tab)是 Bootstrap 框架中的一种交互组件,允许用户在多个页面元素或内容区域之间进行切换。本文将详细介绍 Bootstrap 标签页的使用方法、特点以及如何将其应用于实际项目中。 一、Bootstrap 标签页的使用方…...

从‘坍缩’到‘对齐’:用SimCSE解决BERT句子向量老难题,我的中文业务实验复盘

从语义坍缩到精准对齐:SimCSE在中文业务场景的实战指南 BERT模型在自然语言处理领域取得了巨大成功,但其原生句子向量存在一个令人头疼的问题——语义坍缩。简单来说,就是不同句子的向量在高维空间中倾向于聚集在一起,导致相似度计…...

OpenClaw-Zulip桥接器:实现AI Agent与团队协作工具的无缝集成

1. 项目概述:一个为AI Agent打造的Zulip消息桥梁如果你正在构建一个基于OpenClaw的AI Agent系统,并且你的团队恰好使用Zulip作为内部沟通工具,那么你很可能面临一个痛点:如何让Agent无缝地融入团队的日常对话流?是让团…...