Spring Boot入门教程:60分钟快速上手——一个北漂程序员的深夜自救指南
上周五晚上11点47分,我瘫在深圳南山区科技园附近那套月租3500的小单间地板上,笔记本电脑屏幕还亮着,终端里红得发烫的报错信息像在嘲笑我。老婆发来微信:“今天又加班到这么晚?你那个Spring Boot项目跑起来没?”我盯着消息看了两分钟,手指悬在键盘上,不知道怎么回。不是没跑起来——是压根连“Hello World”都还没打印出来。
去年十月,我从北京裸辞南下深圳。原因很简单:房贷每月8200,加上孩子奶粉钱和老人医药费,北京那15k的月薪实在撑不住了。HR说“深圳机会多”,面试官画饼说“技术栈全面就能涨薪”。于是我把所有积蓄凑成首付,在龙岗买了个小两居,背上了三十年的债。可现实是,入职新公司三个月,我还在用老旧的SSM框架写CRUD,而组里新来的应届生都在聊Spring Boot、微服务、云原生……我感觉自己像一台还在用Windows XP的电脑,被扔进了全是MacBook Pro的会议室。
那个让我失眠的周末
事情的导火索是一道面试题。
上周三团建吃饭,同事小张(比我小五岁,清华毕业)随口问我:“哥,你要是现在跳槽,能答上来‘Spring Boot自动配置原理’吗?”我愣了一下,筷子停在半空。不是不会,是根本没系统学过。我只会照着公司模板改改配置文件,加个@RestController注解,然后祈祷别出错。
那天晚上回家,我翻遍了简历——“熟悉Java开发”、“了解Spring框架”……全是模糊词。真正能拿得出手的项目?除了几个内部管理系统,连GitHub都空空如也。更扎心的是,我在招聘软件上看到一个岗位要求:“熟练掌握Spring Boot,有Python脚本经验者优先”。而我,连Python只会在爬虫课上print("hello")。
那一刻,焦虑像地铁早高峰的人流一样把我淹没。
我知道不能再拖了。周六早上7点,趁着老婆带孩子去早教班,我泡了杯速溶咖啡(不敢买星巴克,太贵),打开IDEA,新建了一个项目,命名为springboot-60min-rescue——就当是救自己一命。
60分钟,从零到跑通第一个接口
很多人觉得Spring Boot难,其实是因为一上来就被“自动配置”、“Starter”、“内嵌Tomcat”这些词吓住了。但如果你把它当成一个“帮你省事的工具包”,一切就简单了。
第一步:创建项目(5分钟)
我用的是 start.spring.io —— 这个网站简直是懒人福音。选好语言(Java)、Spring Boot版本(我选了最新的3.2.0)、打包方式(jar),然后勾上两个最基础的依赖:
- Spring Web:让你能写HTTP接口
- Spring Boot DevTools:改代码不用重启,省时间
点击“Generate”,下载zip包,解压后用IDEA打开。整个过程比点外卖还快。
小插曲:我第一次选了“Lombok”,结果本地没装插件,编译直接报错。折腾了20分钟才搞定。所以新手建议先别贪多,核心依赖够用就行。
第二步:写个Hello World(10分钟)
在 src/main/java 下新建一个包,比如 com.nanshan.developer(南山区打工人专属包名,懂的都笑)。然后新建一个类:
package com.nanshan.developer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
再新建一个Controller:
package com.nanshan.developer.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, 深圳打工人!";
}
}
按F5运行(其实是Shift+F10),控制台刷出一堆日志,最后看到:
Tomcat started on port(s): 8080 (http)
Started Application in 2.345 seconds
浏览器打开 http://localhost:8080/hello,页面弹出:“Hello, 深圳打工人!”
那一刻,我居然有点想哭。 不是因为多难,而是终于跨出了第一步。就像当年第一次挤进10号线早高峰地铁,虽然被挤成纸片人,但至少上车了。
第三步:整合数据库(20分钟)
光会返回字符串不够,真实项目都要连数据库。我用H2内存数据库(不用装MySQL,适合学习),加个依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
然后在 application.properties 里加三行:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=true
写个简单的User实体和Repository:
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
// getter/setter 略
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
再写个接口:
@GetMapping("/users")
public List<User> getAllUsers() {
return userRepository.findAll();
}
启动后访问 http://localhost:8080/h2-console,还能看到Web版的数据库管理界面。我手动插了两条数据,刷新 /users,JSON数据哗哗出来。
这不就是我们天天写的增删改查吗?原来底层就这么简单。
第四步:对比Python,理解“约定优于配置”(15分钟)
说到Python,我突然想起之前用Flask写API的经历。Flask也很轻量:
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'Hello from Python!'
是不是和Spring Boot很像?都是“定义路由 + 返回内容”。区别在于:
- Python靠缩进和装饰器,简洁但容易因格式出错;
- Java靠注解和强类型,啰嗦但结构清晰,适合大型项目。
Spring Boot的核心哲学就是“约定优于配置”——你不用写web.xml,不用配DispatcherServlet,甚至不用管Tomcat怎么启动。它默认知道你要什么,除非你特别说明。
这让我想起深圳的租房市场:中介说“精装交付,拎包入住”,其实就是“约定好了家具家电都有”。你要是非要换地板、拆墙,那就得额外签补充协议(自定义配置)。Spring Boot也是这样——90%的场景用默认就行,剩下10%再动手改。
最后10分钟:打包部署
在pom.xml同级目录执行:
./mvnw clean package
生成一个fat jar(包含所有依赖),然后:
java -jar target/springboot-60min-rescue-0.0.1-SNAPSHOT.jar
服务就跑起来了。这意味着,你可以在任何装了JRE的服务器上一键部署——再也不用手动拷贝一堆lib包,再也不用担心“在我机器上是好的”。
从教程到真实项目:我的综合实践
光看教程不够,我决定把公司一个旧模块重构成Spring Boot。那是个Excel导入功能,原来用POI+Servlet,代码又臭又长。我用Spring Boot + EasyExcel重构,三天搞定,代码量减少60%,还加了异步处理和进度条。
更关键的是,这个小项目成了我简历上的亮点。上周投了一家跨境电商公司,面试官问:“看你用了Spring Boot,能说说自动配置是怎么工作的吗?”
我深吸一口气,回答:
“Spring Boot启动时会加载
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,里面列出了所有自动配置类。比如DataSourceAutoConfiguration,它会检查classpath有没有HikariCP、有没有spring.datasource.url配置,如果有,就自动创建DataSource Bean。整个过程基于@Conditional条件注解,只有满足条件才会生效。”
面试官眼睛一亮:“不错,理解得很到位。”
最终offer薪资22k,比现在高7k。虽然还不够覆盖房贷,但至少看到了希望。
给同样挣扎的你的建议
别怕从“Hello World”开始
我30岁了,还在学基础,丢人吗?不丢人。地铁上刷LeetCode的大叔、凌晨改bug的宝妈,谁不是一边崩溃一边前进?把学习嵌入生活缝隙
我每天通勤2小时(4号线转1号线,早高峰像沙丁鱼罐头),就用手机看Spring文档;午休20分钟,敲几行代码。积少成多。用真实需求驱动学习
别为了学而学。想跳槽?就针对JD里的关键词练。想升职?就把手头项目用新技术重做。技术是工具,不是目的。接受“不完美”
我的第一个Spring Boot项目漏洞百出:没加全局异常处理、没写单元测试、配置文件硬编码……但没关系,先跑起来,再优化。就像我的房贷,不能因为还不清就不还。
写在最后:技术人的尊严
昨天晚上,我又加班到十点。走出写字楼,深圳湾的风吹得人清醒。地铁上,我打开GitHub,给自己的springboot-60min-rescue项目加了个README,写了句:
“献给所有在深夜debug的普通人。代码会报错,但人生不会。”
Spring Boot也好,Python也罢,终究只是我们谋生的工具。真正重要的是,在被生活按在地上摩擦的时候,还能爬起来,敲下一行System.out.println("I'm still here");。
房贷还会继续还,地铁还得继续挤。但至少现在,我知道——只要我还愿意学,就永远不会被淘汰。
共勉, fellow coder。

评论 0