Spring Boot入门教程:60分钟快速上手

CtrlC工程师
2025-12-15 03:58
阅读 718

上周五晚上,我正躺在沙发上刷 Rust 的 async/await 文档(别问,问就是“副业焦虑症”晚期),突然手机叮咚一声——产品经理发来消息:“哥,能不能帮我们搭个内部工具?就一个简单接口,查下订单状态就行,周一上线哈~”

我差点一口老血喷出来。这都快 9 点了,还“周一上线”?行吧,谁让我是那个“接外包搞副业的斜杠程序员”呢——白天在公司肝 Java 微服务,晚上回家撸 Rust,周末还得帮人写脚本换点奶茶钱。但说实话,这种小活儿用 Spring Boot 做,真的一小时搞定,连泡面都不用煮第二包。

所以今天这篇博客,就当是给刚入坑 Java 后端、或者像我一样被 PM 临时抓壮丁的兄弟们,一个 60 分钟速成指南。不讲大道理,只讲怎么跑起来、怎么别踩坑、怎么让产品闭嘴。


为啥又是 Spring Boot?

我知道,现在满大街都在吹 Go、Rust、Node.js,连我司新项目都开始试水 Quarkus 了。但现实是啥?Java + Spring Boot 依然是国内企业级产品的绝对主力。上周我们组 review 代码,12 个微服务里 9 个还是 Spring Boot。原因很简单:

  • 生态成熟,starter 一打,集成 Redis、MySQL、Kafka 跟喝水一样
  • 文档齐全,Stack Overflow 上随便搜都能找到解决方案
  • 运维友好,JVM 调优虽然玄学,但至少有套路可循

而且,老板们信这个。你跟他说“用 Rust 写个高性能服务”,他一脸懵;你说“Spring Boot,稳得很”,他立马点头:“好,下周上线”。


第一步:别搞错 JDK 和 Maven

很多新人栽在这一步。Spring Boot 3.x 要求 JDK 17+,而你本地可能还在用 JDK 8(别笑,我们测试环境就有台服务器跑着 JDK 7,运维说“动了怕崩”)。

先确认你的环境:

java -version
# 推荐 OpenJDK 17 或 21
mvn -v
# Maven 3.6+ 足够

然后去 start.spring.io 生成项目。我一般这么选:

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2.5(最新稳定版)
  • Dependencies:
    • Spring Web(必须)
    • Spring Data JPA(如果你要连数据库)
    • H2 Database(开发时用内存 DB,省事)

点击“Generate”,解压,导入 IDEA。这时候你的 pom.xml 里应该已经有 spring-boot-starter-web 了。


写个 Hello World 接口

新建一个类 OrderController.java

@RestController
@RequestMapping("/api")
public class OrderController {

    @GetMapping("/order/{id}")
    public String getOrderStatus(@PathVariable Long id) {
        // 实际项目这里会查数据库
        return "Order " + id + " is SHIPPED";
    }
}

然后启动 Application.java 主类。控制台看到 Tomcat started on port(s): 8080 就成了。

浏览器访问 http://localhost:8080/api/order/123,返回 Order 123 is SHIPPED —— 搞定!PM 要的功能完成了 50%。

🙃 自嘲一下:去年双11前,我就是因为少写了 @RestController,结果返回的是 HTML 页面而不是 JSON,被测试小姐姐追着问“你这接口是不是坏了”,当场社死。


接数据库?JPA + H2 开发超爽

产品肯定不会满足于写死的数据。假设我们要查真实订单,就得连数据库。

先在 application.properties 里配置:

# 开发时用 H2 内存数据库,重启就丢数据,但不用装 MySQL
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true  # 开启 H2 控制台,浏览器访问 /h2-console

建个实体类:

@Entity
@Table(name = "orders")
public class Order {
    @Id
    private Long id;
    private String status;
    // getter/setter 省略
}

再写个 Repository:

public interface OrderRepository extends JpaRepository<Order, Long> {
}

最后改 Controller:

@Autowired
private OrderRepository orderRepo;

@GetMapping("/order/{id}")
public ResponseEntity<Order> getOrderStatus(@PathVariable Long id) {
    return orderRepo.findById(id)
        .map(ResponseEntity::ok)
        .orElse(ResponseEntity.notFound().build());
}

启动后,访问 http://localhost:8080/h2-console,用默认配置登录,手动插条数据:

INSERT INTO orders (id, status) VALUES (123, 'SHIPPED');

再去调接口,就能拿到真实数据了。开发阶段用 H2,部署时切 MySQL,只需改配置,代码一行不动——这就是 Spring Boot 的优雅。


别忘了资源管理和异常处理

上线前,一定要考虑两点:

  1. 资源释放:数据库连接、线程池这些,Spring Boot 默认帮你管好了,但如果你自己开了线程或文件流,记得用 try-with-resources
  2. 全局异常处理:别让 500 错误直接暴露给前端。

加个全局异常处理器:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(NoSuchElementException.class)
    public ResponseEntity<String> handleNotFound(Exception e) {
        return ResponseEntity.status(404).body("Order not found");
    }
}

这样,当订单不存在时,返回友好的 404,而不是一串 Java stack trace。产品看了都说“专业”


部署?打个 jar 就完事

Spring Boot 最爽的地方就是 fat jar。执行:

./mvnw clean package

生成 target/demo-0.0.1-SNAPSHOT.jar,直接扔到服务器:

nohup java -jar demo-0.0.1-SNAPSHOT.jar > app.log 2>&1 &

配合 Nginx 反向代理,HTTPS 一配,产品验收通过,你又能回去继续研究你的 Rust 了。


性能和生产建议(血泪经验)

虽然这是入门教程,但咱干外包的,得对得起客户的钱。几点生产经验:

事项 开发环境 生产环境
数据库 H2 内存 MySQL / PostgreSQL
日志 console 输出 文件 + ELK
配置 application.properties 外部 config + 加密
健康检查 /actuator/health
监控 Micrometer + Prometheus

特别提醒:别在生产开 H2 控制台!我们有个实习生上线前忘关 spring.h2.console.enabled=true,结果被安全扫描扫出高危漏洞,运维差点把他电脑格式化。


结语:Java 还香吗?

写完这个小项目,总共花了 45 分钟。剩下的 15 分钟,我在想:现在大家都在追新语言,但 Spring Boot 对于快速交付 Java 产品,依然是最稳的选择。它可能不够“酷”,但它能让你准时下班、周末接单、副业搞钱。

当然,我也在学 Rust —— 不是为了取代 Java,而是为了在合适的场景用合适的工具。比如高性能网关、嵌入式系统,Rust 确实香。但如果你要做一个带用户管理、订单流程、支付回调的企业后台?Spring Boot + Java,依然是性价比之王

所以,别被“技术潮流”带偏了节奏。能解决问题、按时交付、让产品闭嘴的代码,才是好代码。

好了,我去改我的 async Rust 了。如果这篇对你有帮助,欢迎点赞关注,下次聊聊《用 Rust 写 Web API 是不是真的比 Spring Boot 快》——不过那得等我先把副业需求做完 😅

评论 0

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