Spring Boot 入门:60分钟从零跑通一个能上线的项目

GoRoutine散步
2026-02-16 03:08
阅读 2112

上周五晚上十一点半,我还在公司改一个司机端订单状态同步的 Bug。这事儿说来有点尴尬——新来的实习生用 Python 写了个小脚本做数据对账,结果把测试库当生产库跑了,差点让几千个司机在早高峰“失联”。运维老哥一边骂骂咧咧重启服务,一边幽幽地说:“你们后端能不能统一用 Java?至少出问题还能看个线程堆栈。”

我默默掏出 Vim,心想:得,是时候给新人写点接地气的入门材料了。

我在滴滴干了快四年,一直搞司机端的核心链路,从派单、接单到完单结算,基本都摸过一遍。这几年团队从单体架构迁到 K8s 上的微服务,Spring Boot 几乎成了标配。虽然我自己偏爱 Go 写 sidecar,但业务主干还是逃不开 Java 生态。最近打算换个环境,面了几家,发现 Spring Boot 依然是后端岗的硬通货——哪怕你简历上写着“精通云原生”,面试官第一句还是:“那你手写个 Spring Boot 启动类看看?”

于是,趁着周末没被 call 起来救火,我决定整一篇真正能 60 分钟跑起来 的 Spring Boot 教程。不玩虚的,不讲 IOC 容器原理(那是面试八股),直接上手搞一个能部署、能调接口、甚至能对接数据库的小项目。顺便聊聊为啥我们团队现在连 Python 脚本都要容器化跑在 K8s 里。


别被“框架”吓到,它就是帮你少写 boilerplate

很多人一听到 Spring Boot 就头大,觉得又是 XML 配置、又是 AOP 切面、又是事务传播……其实在 2024 年,Spring Boot 已经进化得非常“懒人友好”。你只需要:

  • 装个 JDK(17+)
  • 会用 curl 或 Postman
  • 知道啥叫 RESTful 接口

剩下的,交给 Spring Initializr 就行。

我习惯用命令行,所以直接访问 https://start.spring.io 的 API:

curl https://start.spring.io/starter.zip \
  -d dependencies=web,data-jpa,h2 \
  -d packageName=com.didiglobal.driver \
  -d name=driver-service \
  -o driver-service.zip

解压、导入 Vim(别问,问就是肌肉记忆),目录结构长这样:

driver-service/
├── pom.xml
├── src/main/java/com/didiglobal/driver/
│   └── DriverServiceApplication.java
└── src/main/resources/
    ├── application.properties
    └── data.sql

看到没?连数据库都给你配好了 H2(内存数据库),开箱即用。不用像当年我们搞司机位置上报服务时,还得手动配 MySQL 连接池、调 max_connections,结果双 11 前一天 DBA 打电话来说连接数爆了,差点没把我从被窝里拽出来。


写个接口,比写 Python Flask 还快?

我知道有人要说:“Python 一行 flask run 不香吗?” 香是香,但你试试在 Python 里加个全局 TraceID、集成 SkyWalking、支持热加载配置中心?Spring Boot 的 starter 机制把这些全给你封装好了。

比如我们要做个“查询司机基本信息”的接口,三步搞定:

  1. 定义 Entity(对应数据库表)
@Entity
public class Driver {
    @Id
    private Long id;
    private String name;
    private String phone;
    // getter/setter 略
}
  1. 写 Repository(自动生成 CRUD)
public interface DriverRepository extends JpaRepository<Driver, Long> {}
  1. 搞个 Controller
@RestController
@RequestMapping("/drivers")
public class DriverController {

    @Autowired
    private DriverRepository driverRepo;

    @GetMapping("/{id}")
    public Driver getDriver(@PathVariable Long id) {
        return driverRepo.findById(id).orElse(null);
    }
}

启动!./mvnw spring-boot:run,然后:

curl http://localhost:8080/drivers/1

boom!返回 JSON。整个过程不到十分钟,比我当年在 Python 里折腾 SQLAlchemy + Marshmallow 快多了。

而且注意:这个接口天然支持 OpenAPI(加个 springdoc-openapi-starter-webmvc-ui 依赖就行),前端同学直接访问 /swagger-ui.html 就能调试,再也不用追着我问“字段是不是叫 driverName 还是 driver_name”。


别忘了,生产环境不是 localhost

很多教程到这就结束了,但我在滴滴踩过的坑告诉我:能本地跑 ≠ 能上线

比如,你用了 H2 数据库,开心地写了 data.sql 初始化数据:

INSERT INTO driver (id, name, phone) VALUES (1, '张师傅', '138****1234');

本地测试通过,一推 K8s,Pod 起不来——因为 H2 默认只在内存里建表,Pod 重启数据就没了。我们司机端曾经有个“司机信用分”服务,初期就这么干的,结果某次滚动更新后所有司机信用归零,投诉电话被打爆。

所以,真实场景下你得切 MySQL 或 PostgreSQL。改两行配置就行:

# application-prod.properties
spring.datasource.url=jdbc:mysql://prod-db:3306/driver_db
spring.datasource.username=prod_user
spring.datasource.password=${DB_PASSWORD}

配合 K8s 的 Secret 注入密码,安全又合规。运维老哥看了直呼内行。

另外,别忘了加健康检查:

# deployment.yaml
livenessProbe:
  httpGet:
    path: /actuator/health
    port: 8080

Spring Boot Actuator 自动暴露 /actuator/health,集成 readiness/liveness,K8s 能自动剔除不健康的实例。这招在去年国庆节流量洪峰时救了我们好几次——某个节点 GC 卡住,K8s 秒级摘流,司机完全无感。


Replit Agent 和 ChatGPT 能帮到你吗?

最近团队来了个 00 后实习生,问我:“哥,能不能用 Replit Agent 自动生成 Spring Boot 项目?” 我试了试,发现它确实能根据 prompt 创建基础结构,比如:

“Create a Spring Boot app with JPA, H2, and a /drivers endpoint”

Agent 生成的代码居然能跑,但有俩问题:

  1. 没处理异常(比如查不到司机返回 500)
  2. 没加日志上下文(TraceID 丢了)

这时候 ChatGPT 就派上用场了。我让它:“给上面的 controller 加上全局异常处理和 MDC 日志上下文”,它给出了 @ControllerAdviceLogback 的配置示例——虽然要微调,但省了我翻文档的时间。

不过得提醒一句:AI 生成的代码不能直接上生产。我们组有个铁律:任何自动生成的代码,必须经过 Code Review + 单测覆盖。去年就有同事直接 copy Stack Overflow 的连接池配置,结果没设 validationQuery,数据库主从切换时连接泄露,CPU 打满。


性能与扩展:别等到线上崩了才优化

Spring Boot 默认配置适合开发,但生产环境得调优。我们在司机端总结了几条经验:

配置项 开发环境 生产环境 原因
server.tomcat.max-connections 8192 20000+ 司机端长连接多
spring.jpa.open-in-view true false 避免 LazyLoad 在视图层触发 DB 查询
management.endpoints.web.exposure.include * health,metrics 安全考虑

另外,别滥用 @Async!我见过有人把每个 DB 操作都标成异步,结果线程池耗尽,请求排队到超时。正确做法是:核心链路同步,非关键操作(如打点、发通知)走 MQ。


最后:为什么我建议新人学 Spring Boot?

不是因为它多“先进”,而是因为生态成熟、问题好搜、团队协作成本低。你在滴滴、美团、阿里随便拉一个 Java 后端,问他“怎么配 Druid 监控”,他都能给你画出完整流程图。

而且,Spring Boot + K8s 已经成为事实上的云原生 Java 标配。我们司机端现在每个服务都是:

  • Spring Boot 打 fat jar
  • Dockerfile 多阶段构建
  • Helm Chart 部署到 K8s
  • Prometheus + Grafana 监控

这一套下来,新人一周就能参与需求开发。反观某些团队还在纠结“该用 Flask 还是 FastAPI”,CI/CD 流水线都没跑通。

所以,如果你也想跳槽、或者刚入行,花 60 分钟搞懂 Spring Boot 基础,绝对是 ROI 最高的投资。至于 Vim 还是 IDEA?随便啦,反正最后都是 git commit -m "fix bug" 😂

P.S. 实习生后来用 Python 重写了那个对账脚本,但这次跑在 K8s Job 里,挂载了只读数据库账号——运维老哥终于笑了。

评论 0

最热最新
暂无评论
GoRoutine散步Lv.1
0
影响力
0
文章
0
粉丝