60分钟搞定Spring Boot:一个外卖后端的入门速成指南

前端Cloud
2026-05-05 22:36
阅读 237

大家好,我是成都某大厂(对,就是那个黄蓝配色、天天送饭的那个)干了4年Java的老兵。平时写业务代码、扛高并发、修线上Bug,偶尔也写点技术博客记录自己踩过的坑。今天这篇,是给刚接触Spring Boot的新手准备的——因为上周五晚上,我们组来了个实习生小张,一脸懵地问我:“哥,这项目怎么跑起来啊?” 我看着他IDE里一堆红叉,突然意识到:很多人其实卡在了“从零到跑通”的第一步。

所以,趁着周末火锅还没约上,我决定写一篇真正新手友好的Spring Boot入门教程。不讲虚的,60分钟,带你从安装到写出第一个能返回JSON的接口。顺便聊聊为啥我们这种做外卖系统的,离不开它。


为什么是Spring Boot?因为“快”才是王道

在美团,需求来得比骑手还快。产品经理上午说要加个“深夜食堂”标签,下午就要上线。要是还在手动配Tomcat、写web.xml、调依赖冲突……那等到双11,用户怕是只能对着404页面啃泡面了。

Spring Boot的核心优势就俩字:约定优于配置。你不用再纠结“这个Bean该放哪”、“那个Filter怎么注册”,它给你一套默认但合理的方案,开箱即用。比如:

  • 内嵌Tomcat,不用单独部署
  • 自动配置DataSource、Redis、MyBatis等常用组件
  • 启动类加个@SpringBootApplication,一切就绪

我们组现在90%的新服务都是Spring Boot + Spring Cloud Alibaba,配合K8s,一天发版十几次跟喝水一样自然。


环境准备:别让工具链劝退你

先别急着写代码。确保你有:

  • JDK 8 或 11(我们生产环境用的是JDK 11)
  • IntelliJ IDEA(社区版就行,别硬上Eclipse,除非你想体验“等待编译”的禅意)
  • Maven 或 Gradle(我们用Maven,历史包袱重)

真实场景吐槽:去年有个新人用JDK 17跑老项目,结果javax.xml.bind找不到了,折腾半天才发现是JAXB被移除了。记住:版本一致性是运维的第一道防线


第一步:创建你的第一个Spring Boot项目

打开IDEA,选 New Project → Spring Initializr。填好Group和Artifact(比如 com.meituan.demo),然后重点来了——依赖选择

对于入门,勾这三个就够了:

  • Spring Web:提供REST API能力
  • Spring Boot DevTools:热重启,改代码不用重启(拯救生命!)
  • Lombok:少写getter/setter,代码清爽一半

点击Finish,等Maven下载完依赖(建议提前配好阿里云镜像,不然等得你想去楼下吃顿火锅)。


第二步:写个接口试试水

项目结构长这样:

src
└── main
    ├── java
    │   └── com.meituan.demo
    │       └── DemoApplication.java  ← 启动类
    └── resources
        └── application.properties

com.meituan.demo包下新建一个HelloController.java

package com.meituan.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // 这个注解 = @Controller + @ResponseBody
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Welcome to Meituan! Your food is on the way 🚴‍♂️";
    }
}

启动DemoApplication,控制台看到Started DemoApplication in X seconds,说明成功了!

浏览器访问 http://localhost:8080/hello,应该能看到那句欢迎语。

小贴士:端口默认8080,如果被占用了(比如你开了Docker或另一个项目),在application.properties里加一行:

server.port=8081

返回JSON?加个对象就行

光返回字符串太单薄。现实中我们都是返回JSON结构体。比如用户信息:

// User.java
import lombok.Data;

@Data // Lombok自动生成getter/setter/toString
public class User {
    private Long id;
    private String name;
    private String phone;
}

然后改造Controller:

@GetMapping("/user")
public User getUser() {
    User user = new User();
    user.setId(1001L);
    user.setName("张三");
    user.setPhone("138****1234");
    return user; // Spring Boot自动转JSON
}

访问 /user,你会得到:

{
  "id": 1001,
  "name": "张三",
  "phone": "138****1234"
}

背后是Jackson在干活,Spring Boot已经帮你集成好了,不用额外配置。


聊聊那些“无关但重要”的关键词:MCP、爬虫、Go

你可能会问:“文章要求提MCP、爬虫、Go,这跟Spring Boot有啥关系?”

说实话,没直接关系。但作为一线开发者,我想借机说点实在话:

  • MCP(Multi-Cloud Platform):我们内部叫“多云平台”。Spring Boot应用之所以能快速部署到阿里云、腾讯云甚至私有云,正是因为它的轻量和标准化。打成jar包,丢到任何装了JDK的机器都能跑。

  • 爬虫:虽然Java不是爬虫首选(Python更香),但在某些风控场景,我们会用Spring Boot搭一个反爬服务。比如接收Nginx转发的可疑请求,用规则引擎判断是否拦截。这时候,Spring Boot的高性能HTTP处理能力就派上用场了。

  • Go:坦白讲,我们新项目里Go越来越多,尤其在基础设施层(如网关、日志收集)。但业务系统还是Java为主——生态成熟、人才多、调试方便。Spring Boot降低了Java门槛,让业务开发更专注逻辑而非框架。

所以,别被“语言之争”带偏。工具服务于场景。在美团,Java + Spring Boot依然是交付业务价值的主力。


配置文件怎么玩?properties vs yaml

application.properties 是默认配置文件,但写复杂配置时,YAML更清晰。比如数据库连接:

# application.yml
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

注意缩进!YAML靠空格分层,Tab会报错(别问我怎么知道的)。


生产环境注意事项(血泪经验)

别以为本地跑通就万事大吉。上线前至少检查这几点:

项目 开发环境 生产环境
日志级别 DEBUG WARN 或 ERROR
数据库连接池 HikariCP 默认 调整 maxPoolSize、connectionTimeout
健康检查 可有可无 必须暴露 /actuator/health 给K8s
敏感信息 直接写密码 用配置中心(如Apollo)或环境变量

我们曾经因为没关DEBUG日志,磁盘被打爆,半夜被PagerDuty叫醒。从此团队立下规矩:所有新服务必须过安全扫描+配置审计


最后:60分钟够吗?

如果你跟着敲代码,不摸鱼、不查无关资料,60分钟绝对够跑通一个基础服务。但要真正掌握,还得继续深入:

  • 如何集成MyBatis操作数据库?
  • 怎么做全局异常处理?
  • JWT鉴权怎么加?
  • 单元测试怎么写?

这些,留到下一篇吧。毕竟成都的火锅还在等我,而我的实习生小张刚刚发消息说:“哥,我又遇到个ClassNotFoundException……”


写在结尾:技术没有银弹,但Spring Boot确实让Java开发变得更“人性化”。它不会替你设计架构,也不会自动扛住百万QPS,但它给了你一个干净、快速、可扩展的起点。而这,正是我们在外卖这种高速迭代业务中最需要的。

下次见,记得点赞关注,不然我领导又要说我“只写代码不输出影响力”了 😅

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝