资讯动态

SpringBoot 2小时入门实战:从零构建可运行Web应用

发布时间:2026/9/2 8:45:01 来源:尧图企业网站定制
1. 先搞清楚 SpringBoot 到底解决了什么以及“2小时入门”的真相如果你刚接触 Java Web 开发或者被各种繁琐的 Spring 配置搞得头大那 SpringBoot 就是你现阶段最该投入时间学习的框架。它不是什么全新的技术而是对 Spring 框架的一种“约定大于配置”的封装核心目标就一个让你能快速启动一个可运行的、生产就绪的 Web 应用把精力从 XML 配置、依赖冲突、服务器部署这些杂事上解放出来聚焦在业务代码本身。“2小时入门”这个说法关键在于定义“入门”。如果你指望 2 小时后就能精通微服务、秒杀系统那肯定不现实。但如果你目标是在 2 小时内从零开始成功运行一个最简单的 SpringBoot 应用并理解其核心工作模式这完全可行。这个“入门”指的是让你跨过“从环境搭建到第一个接口跑通”这个最让人沮丧的门槛建立最基础的信心和认知框架。后续的数据库操作、事务管理、集成第三方组件都是在这个稳固的“地基”上添砖加瓦。很多弯路其实就绕在第一步。比如在 IDE 里折腾半天项目结构或者被一个莫名其妙的依赖版本冲突卡住。SpringBoot 通过 Starter 依赖、自动配置和嵌入式服务器默认是 Tomcat这三板斧几乎消灭了这些初期障碍。你接下来要做的就是跟着一个清晰的路径亲手把这个“黑盒”打开看一眼。2. 环境准备别在起点卡住JDK、Maven/Gradle、IDE 三件套动手之前先把环境理顺。很多“跑不起来”的问题根源都在这儿。1. JDK 版本是第一位SpringBoot 3.x 需要 JDK 17 或更高版本SpringBoot 2.x 通常需要 JDK 8 或 11。对于纯粹的新手我建议直接从JDK 17 SpringBoot 3.x开始这是当前的主流技术栈能避免学完老版本又得迁移的尴尬。去 Oracle 官网或 Adoptium 下载安装然后确保命令行执行java -version能正确显示版本。2. 构建工具选 Maven 还是 Gradle对于入门强烈建议先用 Maven。它的pom.xml配置文件结构清晰网上资料也最全。SpringBoot 官网生成的初始项目也默认提供 Maven 格式。Gradle 更灵活但语法对新手可能有点怪。先确保 Maven 安装并配置好国内镜像比如阿里云镜像否则下载依赖会慢到怀疑人生。在~/.m2/settings.xml中配置镜像源是第一步就该做的事。3. IDE 就用 IntelliJ IDEA Community 版别犹豫对于 Java 开发IDEA 的体验是最好的。社区版免费对 SpringBoot 的支持已经足够强大。Eclipse 当然也能用但 IDEA 在智能提示、Spring 配置支持和一键运行方面的优势太明显。用 IDEA 创建 SpringBoot 项目能帮你自动处理很多初始配置。注意不要在这个阶段追求“最新”。比如非要尝试 JDK 21 或 SpringBoot 的最新快照版。锁定一个稳定的、资料多的组合JDK 17 SpringBoot 3.2.x能避开很多未知的兼容性坑。3. 创建第一个项目从 IDEA 向导到“Hello World”理论说再多不如跑一行代码。我们通过 IDEA 来创建这是最直观的方式。3.1 通过 Spring Initializr 创建项目打开 IDEA选择 “New Project”。左侧选择 “Spring Initializr”。它会连接官方的项目生成服务。Project SDK选择你安装的 JDK 17。填写项目元数据Group通常用公司域名倒写如com.example。Artifact你的项目名如demo。这里最关键的是Type选 MavenLanguage选 JavaPackaging选 Jar。SpringBoot 推荐打成可执行 Jar内置了 Tomcat。Java Version选 17。选择依赖这是 SpringBoot 精髓。我们只选最核心的Spring Web包含了构建 Web 应用包括 RESTful API所需的依赖如 Spring MVC, Tomcat。Spring Boot DevTools开发工具支持热重启提升开发效率。其他如Lombok简化JavaBean编写可以先不选保持纯粹。点击 Next选择项目存放位置然后 Finish。IDEA 会自动下载初始项目骨架。完成后你会看到一个标准的 Maven 项目结构其中src/main/java下有一个以你Artifact命名的包里面有一个*Application类类上有个SpringBootApplication注解。这个类就是整个应用的入口。3.2 编写第一个 REST 接口在com.example.demo包下或新建一个controller包新建一个 Java 类叫HelloController。输入以下代码package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; RestController // 标记这个类是一个控制器并且返回的是数据如JSON不是视图名 public class HelloController { GetMapping(/hello) // 处理 GET 请求路径是 /hello public String sayHello() { return Hello, SpringBoot!; } }3.3 运行并验证回到那个*Application类例如DemoApplication直接运行它的main方法。控制台会开始刷日志。当你看到类似Tomcat started on port(s): 8080和Started DemoApplication in x.xxx seconds的日志时说明启动成功了。打开浏览器访问http://localhost:8080/hello。如果页面上显示Hello, SpringBoot!恭喜你你的第一个 SpringBoot 应用已经跑起来了这个过程看似简单但意义重大你没有配置任何 XML没有手动部署 Tomcat只是写了一个带注解的类应用就启动了。这就是 SpringBoot 的“开箱即用”。4. 理解核心机制自动配置、Starter 与嵌入式容器项目跑起来了我们得知道它为什么能跑。理解下面三点能解决你未来 80% 的“为什么我的功能不生效”问题。4.1 自动配置SpringBootApplication的秘密你入口类上的SpringBootApplication是一个组合注解它包含了SpringBootConfiguration标记这是 SpringBoot 的配置类。EnableAutoConfiguration开启自动配置的核心。ComponentScan自动扫描当前包及其子包下的组件如Controller,Service。EnableAutoConfiguration会根据你引入的Starter 依赖自动推断并配置你需要的 Bean。比如你引入了spring-boot-starter-webSpringBoot 就会自动配置一个嵌入式的 Tomcat 服务器、一个DispatcherServletSpring MVC 核心、默认的 JSON 转换器等。你不需要写一堆Bean配置。4.2 Starter 依赖一站式功能包Starter 是一组预定义好的依赖描述。引入一个 Starter就等于引入了一个功能全家桶。例如spring-boot-starter-web就包含了 Spring MVC、Tomcat、JacksonJSON处理等。这解决了传统 Maven 项目中令人头疼的依赖版本冲突问题——SpringBoot 帮我们管理好了这些版本的兼容性。在pom.xml里它们的版本由spring-boot-starter-parent统一管理。4.3 嵌入式容器从 WAR 到可执行 JAR传统 Java Web 应用需要打包成 WAR 文件部署到独立的 Tomcat 等服务器。SpringBoot 应用打包成一个可执行的 JAR这个 JAR 里包含了编译后的代码、所有依赖库以及一个内嵌的 Web 服务器默认 Tomcat。你直接用java -jar yourapp.jar就能启动一个完整的 Web 服务。这极大地简化了部署和运维。5. 连接数据库用 Spring Data JPA 实现增删改查Web 应用离不开数据持久化。我们用 Spring Data JPA 来操作数据库这是 SpringBoot 生态下非常高效的方式。5.1 添加依赖与配置打开pom.xml在dependencies节点内添加两个依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope !-- 运行时才需要 -- /dependency如果你用 PostgreSQL就换对应的驱动。配置数据库连接。打开src/main/resources/application.properties文件或application.yml添加spring.datasource.urljdbc:mysql://localhost:3306/your_database_name?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai spring.datasource.usernameyour_username spring.datasource.passwordyour_password spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-autoupdate spring.jpa.show-sqltrue spring.jpa.properties.hibernate.dialectorg.hibernate.dialect.MySQL8Dialectddl-autoupdate启动时根据实体类自动更新表结构仅用于开发生产环境慎用或设为none。show-sqltrue在控制台打印执行的 SQL方便调试。5.2 创建实体类与仓库接口创建一个实体类例如User对应数据库中的user表。package com.example.demo.entity; import jakarta.persistence.*; import java.time.LocalDateTime; Entity Table(name user) public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; private String username; private String email; private LocalDateTime createTime; // 省略构造函数、Getter/Setter可用Lombok的Data注解简化 }创建一个仓库接口继承JpaRepository。这是最神奇的地方你不需要写实现。package com.example.demo.repository; import com.example.demo.entity.User; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface UserRepository extends JpaRepositoryUser, Long { // 可以根据方法名自动生成查询 ListUser findByUsername(String username); ListUser findByEmailContaining(String keyword); }Spring Data JPA 会根据方法名如findByUsername自动生成对应的 SQL 实现。5.3 在 Controller 中调用修改或新建一个UserControllerpackage com.example.demo.controller; import com.example.demo.entity.User; import com.example.demo.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.util.List; RestController RequestMapping(/api/users) public class UserController { Autowired private UserRepository userRepository; PostMapping public User createUser(RequestBody User user) { user.setCreateTime(LocalDateTime.now()); return userRepository.save(user); // 新增 } GetMapping public ListUser getAllUsers() { return userRepository.findAll(); // 查询所有 } GetMapping(/{id}) public User getUserById(PathVariable Long id) { return userRepository.findById(id).orElse(null); // 按ID查询 } // 更新和删除方法类似调用 saveID存在则更新和 deleteById }重启应用现在你就拥有了一个具备完整 CRUD 功能的 REST API。通过 Postman 或 curl 测试/api/users的 POST 和 GET 请求看看数据是否成功存入数据库。6. 配置文件与多环境让应用适应不同场景一个应用需要在开发、测试、生产等不同环境运行配置如数据库地址、日志级别自然也不同。SpringBoot 提供了强大的配置管理能力。6.1 配置文件优先级SpringBoot 支持application.properties和application.yml更简洁两种格式。配置文件可以放在多个位置优先级从高到低项目根目录下的/config子目录。项目根目录。classpath 下的/config包即resources/config。classpath 根目录即resources。高优先级的配置会覆盖低优先级的配置。这常用于生产环境部署将包含生产数据库密码的application-prod.properties放在服务器项目根目录的/config下而代码库中只保留开发配置。6.2 多环境配置主配置文件application.properties存放通用配置。环境特定配置文件application-{profile}.properties如application-dev.properties开发环境application-prod.properties生产环境。在application.properties中通过spring.profiles.activedev来激活指定环境的配置。也可以在启动命令中指定java -jar yourapp.jar --spring.profiles.activeprod。6.3 自定义配置与注入你可以在application.properties中定义自己的配置app.nameMy SpringBoot Demo app.version1.0.0然后通过Value注解注入到 Bean 中RestController public class AppInfoController { Value(${app.name}) private String appName; GetMapping(/appinfo) public String getAppInfo() { return Application: appName; } }对于更结构化的配置推荐使用ConfigurationProperties注解将配置绑定到一个 Java Bean 上便于管理和类型安全。7. 常见问题排查当代码跑不起来时先看这里即使按照步骤来也可能会遇到问题。别慌按这个顺序排查大部分问题都能定位。7.1 应用启动失败端口被占用日志中会出现Port 8080 was already in use。解决方案修改server.port8081或停用占用 8080 端口的进程。数据库连接失败检查application.properties中的 URL、用户名、密码是否正确检查数据库服务是否启动检查网络是否通畅。依赖下载失败/版本冲突检查 Maven 镜像配置尝试mvn clean compile看具体错误在 IDEA 中查看 Maven 依赖树排除冲突的传递依赖。主类找不到确保SpringBootApplication注解的类在顶层包并且ComponentScan能扫描到你的 Controller、Service 等组件。通常把它们放在主类所在的包或其子包下。7.2 接口访问 404Controller 未被扫描确保 Controller 类在SpringBootApplication主类所在包或其子包下或者使用了ComponentScan指定了包路径。请求路径或方法不匹配检查GetMapping/PostMapping等注解的路径以及 HTTP 方法GET/POST等是否正确。未添加RestController或Controller注解。7.3 数据库操作异常ddl-autoupdate不生效检查实体类的Entity、Id注解是否正确检查数据库连接是否成功。JpaRepository方法调用报错检查方法命名是否符合规范如findByUsername复杂的查询考虑使用Query注解写 JPQL 或原生 SQL。7.4 打包后运行出错java -jar提示 “没有主清单属性”说明打包方式不对。确保pom.xml中使用了spring-boot-maven-plugin插件并且执行的是mvn clean package打包后的 jar 文件通常位于target目录。运行时配置不生效记住打包进 jar 的application.properties优先级较低。生产环境配置应放在与 jar 同级的/config目录或通过命令行参数--spring.profiles.activeprod指定。8. 下一步该学什么从入门到能干活当你成功运行了第一个包含数据库操作的 SpringBoot 应用后“入门”阶段就算完成了。接下来为了能真正开始干活你需要按顺序攻克以下几个核心主题Spring MVC 深入理解RequestMapping,RequestParam,PathVariable,RequestBody,ResponseBody等注解的详细用法掌握请求/响应处理的全流程。Service 层与事务管理将业务逻辑从 Controller 抽离到 Service 层。学习Service注解和Transactional事务管理。理解 SpringBoot 中事务默认是自动提交的吗答案是在声明式事务Transactional中默认不是自动提交它会在方法执行成功后提交异常时回滚。但如果是单纯的 JPAsave操作其本身会在事务中执行。项目结构分层形成清晰的controller-service-repository/dao-entity的分层架构。理解各层的职责。常用 Starter 集成spring-boot-starter-data-redis集成 Redis用于缓存或会话存储。spring-boot-starter-security或spring-boot-starter-oauth2-resource-server实现认证与授权。spring-boot-starter-validation进行参数校验如NotNull,Email。spring-boot-starter-aop实现面向切面编程处理日志、监控等。单元测试学习使用spring-boot-starter-test为你的 Service 和 Controller 编写单元测试和集成测试这是保证代码质量的关键。打包与部署学习如何将应用打包成 Docker 镜像或部署到常见的云服务器、容器平台。学习路径上切忌贪多求全。围绕一个简单的业务场景比如一个博客系统的文章增删改查把上述知识点一个个集成进去动手实现一遍远比只看文档和视频有效。遇到问题优先查看官方文档、Stack Overflow 和项目的 GitHub Issue。SpringBoot 的生态非常成熟你遇到的绝大多数问题都已经有人给出过解答。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价