Spring Boot入门教程:60分钟快速上手
上周五晚上十点半,我还在公司对着 MacBook Pro 屏幕发呆。产品经理又在群里@我:“这个需求明天上线,后端接口今晚能好吗?” 我看了一眼 backlog,心里一万个草泥马奔腾而过——但没办法,谁让我是个靠接外包搞副业的斜杠程序员呢?坐标北京,通勤1小时,主业糊口,副业续命,平时写 Go 和 Python 跑得飞快,结果最近几个外包项目都指名要 Java + Spring Boot,理由居然是“客户那边运维只认 Java”。
行吧,为了那笔可观的尾款,我咬牙把 Mac 上的 IntelliJ IDEA 打开(Windows?那玩意儿我只留着装个浏览器测兼容性),硬着头皮重新拾起三年没碰的 Spring Boot。没想到折腾完发现:这玩意儿现在真的香!比当年那个 XML 配置地狱时代清爽太多了。今天就借着这个机会,给和我一样被“赶鸭子上架”的兄弟们写一篇 60 分钟快速上手指南。
为什么是 Spring Boot?前端同学都看不下去了
先说点实在的。我们做外包的,最怕啥?时间紧、需求变、技术栈杂。上周一个项目,前端用 Vue 写好了页面,数据接口全 mock 好了,就等我这边联调。结果我拿 Python Flask 搞了个原型,客户 IT 部门直接拒了:“我们生产环境只有 OpenJDK,Python 环境审批要两周。” 我当场裂开。
这时候 Spring Boot 的优势就出来了:
- 约定优于配置:不用再写几百行 XML,启动类加个
@SpringBootApplication就跑起来了 - 内嵌 Tomcat:打成 jar 包直接
java -jar启动,运维小哥看了直呼专业 - 生态无敌:连 Redis、MySQL、Kafka 都有 starter,一行依赖搞定集成
而且重点来了:它对前端极其友好!RESTful API 返回 JSON?默认就支持。CORS 跨域?加个注解就行。不像某些框架还要手动序列化,前端同事再也不用在群里疯狂 at 我问“你这接口返回的是字符串还是对象?”
60分钟实操:从零到部署
第一步:环境准备(5分钟)
确保你装了:
- JDK 17(别用 8 了,新项目直接上 17+)
- Maven 或 Gradle(我个人偏爱 Gradle,构建快)
- 一个趁手的 IDE(IntelliJ IDEA 社区版就够用)
# 验证一下
java -version
mvn -v
🙋♂️ 吐槽时间:上次有个外包客户非要用 Eclipse,我差点当场辞职。Mac 上 IDEA 的快捷键肌肉记忆救我狗命。
第二步:创建项目(10分钟)
打开 start.spring.io,这是 Spring 官方脚手架,比自己搭快十倍。
我一般选这些:
- Project: Gradle Project
- Language: Java
- Spring Boot: 3.2.x(最新稳定版)
- Dependencies: Spring Web, Spring Data JPA, H2 Database(开发用内存数据库,省事)
点击 Generate,下载 zip 解压,用 IDEA 打开——恭喜,你的项目骨架有了!
目录结构长这样:
src/
├── main/
│ ├── java/com/example/demo/
│ │ └── DemoApplication.java ← 启动类
│ └── resources/
│ ├── application.properties ← 配置文件
│ └── static/ ← 放前端静态资源(虽然我们通常前后端分离)
第三步:写个 Hello World 接口(15分钟)
在 com.example.demo 下新建 controller 包,创建 HelloController.java:
@RestController // 这个注解 = @Controller + @ResponseBody,直接返回 JSON
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public Map<String, Object> sayHello() {
Map<String, Object> resp = new HashMap<>();
resp.put("message", "Hello, Spring Boot!");
resp.put("timestamp", System.currentTimeMillis());
return resp;
}
}
启动 DemoApplication,浏览器访问 http://localhost:8080/api/hello,看到 JSON 输出就算成功!
💡 小技巧:开发时加个
spring-boot-devtools依赖,代码改完自动重启,省去手动 stop/start 的烦恼。
第四步:连数据库,搞个 CRUD(20分钟)
外包项目哪能没有用户管理?来个简单的 User 表。
- 建实体类(
entity/User.java):
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getter/setter 省略,实际可用 Lombok
}
- 写 Repository(
repository/UserRepository.java):
public interface UserRepository extends JpaRepository<User, Long> {
// Spring Data JPA 自动实现 CRUD,不用写 SQL!
}
- 写 Service 和 Controller(略,核心逻辑在 Controller):
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
return userRepository.findById(id)
.map(user -> ResponseEntity.ok().body(user))
.orElse(ResponseEntity.notFound().build());
}
- 配置 H2 数据库(
application.properties):
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.hibernate.ddl-auto=create-drop
⚠️ 注意:
ddl-auto=create-drop只用于开发!生产环境必须用validate或none,配合 Flyway 做数据库迁移,不然哪天删库跑路就真成梗了。
第五步:打包 & 部署(10分钟)
执行:
./gradlew bootJar
生成的 jar 在 build/libs/demo-0.0.1-SNAPSHOT.jar。
扔到服务器上:
nohup java -jar demo-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
🛠️ 运维经验:一定要加
nohup和日志重定向!否则 SSH 断开进程就挂了。另外建议用 systemd 或 Docker 管理,别学我早年直接&后台跑,半夜报警都不知道是哪个进程崩了。
性能与架构思考:别只顾跑起来
作为搞过 Go 和 Python 的人,我一开始觉得 Java 启动慢、内存大。但 Spring Boot 3 + GraalVM 原生镜像已经能大幅改善。不过对于普通外包项目,其实没必要折腾。
更关键的是接口设计和数据库优化:
| 问题 | 解决方案 |
|---|---|
| N+1 查询 | 用 @EntityGraph 或 DTO 投影 |
| 接口太重 | 按需返回字段,避免前端拿到一堆没用的数据 |
| 日志混乱 | 统一用 SLF4J + MDC,方便链路追踪 |
还有,千万别在 Controller 里写业务逻辑!我见过实习生直接在接口里查三次数据库拼数据,线上 QPS 一高就 CPU 100%。分层架构不是形式主义,是保命符。
最后:为什么我不转全职 Java?
说实话,经过这几个 Spring Boot 外包项目,我对它的印象改观很大。启动快、生态全、文档齐,特别适合快速交付型项目。但让我放弃 Go 和 Python?不可能。
- Go 适合高并发微服务,写起来简洁,编译快,部署无依赖
- Python 适合数据分析、脚本自动化,胶水语言名不虚传
- Spring Boot 则是企业级应用的“稳妥之选”,尤其当客户说“我们要用 Oracle”时……
所以我的策略很明确:用最适合的工具解决最匹配的问题。Spring Boot 是我工具箱里重要的一把锤子,但不是唯一的锤子。
写在最后
60 分钟可能有点赶,但足够让你跑通一个可演示的项目。真正的难点在于理解 Spring 的核心思想:IoC(控制反转)和 AOP(面向切面)。不过外包嘛,先跑起来再说,原理可以边干边补。
如果你也在接外包,被逼着学新技术,别慌。我去年双11还在用 Python 写爬虫,现在也能淡定地写 JPA Repository。程序员的核心能力不是记住语法,而是快速学习 + 快速交付。
对了,这篇文章写完,我得赶紧去改那个明天上线的接口了……产品经理又在群里催了:“哥哥,求求了!” 😅
附:常用命令速查
# 创建项目(命令行版)
curl https://start.spring.io/starter.zip -d dependencies=web,data-jpa,h2 -d type=gradle-project -o demo.zip
# 查看应用是否启动
lsof -i :8080
# 打包跳过测试
./gradlew bootJar -x test

评论 0