Spring Boot 入门:60分钟从零到能跑
上周五晚上十一点,我正对着 MacBook Pro 上的 LeetCode 疯狂刷题,突然钉钉弹出一条消息——“老哥,新项目下周启动,后端用 Spring Boot,你得带一下新人。”
我差点把手中的冰美式泼到键盘上。
作为在快手干了六年的老架构师,从短视频推荐系统到直播中台,我亲手搭过十几个核心后端服务,Spring Boot 早就成了我的“第二母语”。但说实话,最近一年我其实更关注 Go ——不是因为 Java 不行,而是团队里越来越多的服务开始用 Go 重构,尤其在高并发、低延迟场景下,Go 的协程模型和编译部署优势确实香。
可现实是,公司里 80% 的业务后端还是 Java 生态,尤其是 Spring Boot,几乎成了“标配”。新人入职第一天,PM 就催着要个 mock API,你说你让他先学三天 Spring 再写代码?别闹了,deadline 可不等人。
所以,这篇《60分钟快速上手 Spring Boot》就是为那些“被赶鸭子上架”的同学准备的。别担心,不讲八股文,不堆概念,就告诉你怎么最快跑起来一个能用的后端服务,顺便聊聊我在生产环境踩过的坑。
为什么是 Spring Boot?为什么不直接上 Go?
先说清楚:我不是 Java 原教旨主义者。事实上,我自己的 side project 全是用 Go 写的——部署简单、内存占用低、启动快如闪电。但在企业级开发中,Spring Boot 的生态优势依然碾压。
- 开箱即用:Web、JPA、Security、Actuator……主流功能官方 starter 一引就完事。
- 调试友好:IDEA + Spring DevTools 热更新,改完代码秒生效(虽然有时候会抽风)。
- 运维成熟:日志、监控、健康检查、指标暴露,一套组合拳打下来,SRE 都夸你会做人。
- 人才池大:招人容易,交接不慌,离职前不用写 200 页文档。
当然,如果你要做高性能网关、实时计算引擎,或者对资源极度敏感(比如边缘设备),那 Go 确实更合适。但如果是常规的 CRUD 业务、内部管理系统、甚至中小型微服务,Spring Boot 依然是最稳妥的选择。
💡 我的建议:主语言可以是 Go,但 Spring Boot 得会。毕竟跳槽面试时,90% 的国内大厂后端岗还是 Java 技术栈。
60 分钟速成路线图
咱们不玩虚的,目标很明确:60 分钟内,本地跑起一个带数据库、REST API、基本配置的 Spring Boot 应用。
第一步:环境准备(5 分钟)
确保你有:
- JDK 17(别用 8 了,都 2024 年了)
- Maven 或 Gradle(我用 Gradle,简洁)
- 一个趁手的 IDE(IntelliJ IDEA,别杠,Eclipse 真的没人用了)
- MySQL 或 H2(本地开发用 H2 更方便,内存数据库,零配置)
# 检查 Java 版本
java -version
# openjdk version "17.0.9" 2023-10-17
🤓 吐槽一句:有些新人还在 Windows 上搞开发,结果
mvn clean package卡半天。兄弟,听我一句劝,Mac + iTerm2 + Oh My Zsh,效率翻倍。Windows?留着测兼容性吧。
第二步:创建项目(5 分钟)
打开 start.spring.io,选好配置:
| 选项 | 推荐值 |
|---|---|
| Project | Gradle (Kotlin or Groovy) |
| Language | Java |
| Spring Boot | 3.2.x |
| Dependencies | Spring Web, Spring Data JPA, H2 Database, Lombok |
下载 zip,解压,导入 IDEA。
⚠️ 注意:Spring Boot 3.x 要求 JDK 17+,且默认使用 Jakarta EE 9(包名从
javax.*变成jakarta.*),别用旧教程,不然@Entity都找不到。
第三步:写个实体和 Repository(10 分钟)
假设我们要做一个简单的用户管理。
// User.java
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
// UserRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// Spring Data JPA 自动实现,连 SQL 都不用写
}
Lombok 的 @Data 自动生成 getter/setter/toString,省下 50 行样板代码。别跟我说“影响 debug”,用了就回不去了。
第四步:写 Controller(10 分钟)
// UserController.java
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserRepository userRepository;
public UserController(UserRepository userRepository) {
this.userRepository = userRepository; // 构造器注入,比 @Autowired 更安全
}
@GetMapping
public List<User> getAllUsers() {
return userRepository.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
}
注意:这里用的是 构造器注入,不是字段注入。前者在单元测试和不可变性上更优,也是 Spring 官方推荐方式。
第五步:配置 H2 数据库(5 分钟)
application.yml:
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create-drop # 开发时自动建表,重启清空
show-sql: true
h2:
console:
enabled: true # 开启 H2 控制台
启动应用后,访问 http://localhost:8080/h2-console,输入 JDBC URL jdbc:h2:mem:testdb,就能看到数据库内容了。调试神器!
第六步:测试接口(10 分钟)
用 curl 或 Postman:
# 创建用户
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{"name":"张三","email":"zhangsan@example.com"}'
# 获取所有用户
curl http://localhost:8080/api/users
如果返回 JSON,恭喜你,后端服务跑通了!
第七步:加点“生产味”(15 分钟)
真实项目不可能只靠内存数据库。这时候要切换到 MySQL,并考虑以下几点:
1. 配置分离
# application-prod.yml
spring:
datasource:
url: jdbc:mysql://prod-db:3306/myapp?useSSL=false&serverTimezone=UTC
username: prod_user
password: ${DB_PASSWORD} # 从环境变量读取,别硬编码!
2. 连接池
Spring Boot 3 默认用 HikariCP,性能极佳。但记得调参:
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 30000
3. 健康检查 & 监控
加入 Actuator:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
访问 /actuator/health,能看到数据库、磁盘、内存状态。运维看了直呼内行。
4. 日志规范
用 application.yml 统一日志格式:
logging:
pattern:
console: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
线上事故排查时,结构化日志能救命。
Spring Boot vs Go:我的真实对比
在快手,我们做过一个实验:同一个订单查询接口,分别用 Spring Boot 和 Go (Gin) 实现。
| 指标 | Spring Boot | Go (Gin) |
|---|---|---|
| 冷启动时间 | ~3s | ~50ms |
| 内存占用 | ~300MB | ~20MB |
| QPS (4核) | 4500 | 12000 |
| 开发速度 | 快(生态全) | 中(需手动集成) |
| 团队熟悉度 | 高 | 中 |
结论很现实:Go 性能更强,但 Spring Boot 更适合快速交付业务。除非你有极致性能需求,否则别为了“技术先进”而牺牲迭代速度。
🎯 我的经验:核心链路(如支付、风控)用 Go,外围业务(如管理后台、通知服务)用 Spring Boot,混合架构才是王道。
踩坑预警:这些坑我替你踩过了
- 事务失效:
@Transactional方法必须是 public,且不能 self-invocation(自己调自己)。否则事务不生效,数据乱成一锅粥。 - N+1 查询:JPA 默认懒加载,循环查关联对象时会炸。用
@EntityGraph或 DTO 投影解决。 - 内存泄漏:H2 在测试环境没问题,但线上千万别用内存模式。曾经有个实习生上线了 H2,半夜报警说“数据库没了”……
- 版本冲突:Spring Boot 的依赖管理很智能,但一旦手动指定某个库版本(比如为了兼容老系统),可能引发 classpath 地狱。
最后:Spring Boot 只是起点
60 分钟能让你跑起来一个服务,但离“生产可用”还差得远。真正的挑战在于:
- 如何设计合理的领域模型?
- 如何做分库分表?
- 如何保证接口幂等?
- 如何灰度发布?
这些,才是架构师该操心的事。
不过话说回来,作为一个准备跳槽的老兵,我现在反而更欣赏 Spring Boot 的“稳”。它可能不够酷,不够快,但它能让你在 deadline 前交差,让 PM 睡个好觉,让 SRE 不半夜打电话骂你。
这就够了。
🚀 下次见面,或许我会写一篇《Go 微服务实战:从 Spring Boot 迁移的血泪史》。毕竟,技术没有银弹,只有权衡。
现在,去跑你的第一个 Spring Boot 应用吧。记住:能跑就行,先上线再说——这是每个老程序员的生存哲学。

评论 0