application.properties
大专毕业两年,我靠自学前端进了现在的公司。但去年双11前夕,后端兄弟突然请假住院,领导拍着我肩膀说:“小张啊,你不是懂点 Java 吗?临时顶一下 Spring Boot 接口吧。”
我内心:???
我简历上写的“熟悉 Java 基础”,结果被当成了全栈预备役。那晚我啃着泡面翻官方文档,凌晨三点终于跑通第一个 Hello World。如今快两年了,Spring Boot 也从“救命稻草”变成了日常工具。今天这篇教程,就是写给和我一样——非科班、半路出家、但想快速搞定后端入门的兄弟。
60 分钟搞懂 Spring Boot?别信标题党,但真能跑起来
很多人一听到 Spring Boot 就想到“配置地狱”、“依赖冲突”、“启动慢如蜗牛”。其实对于简单项目,它比你想象中轻得多。我当初就是抱着“能跑就行”的心态,先让 API 返回个 JSON,再慢慢往里填肉。
起手式:别整花活,先跑起来
我用的是 JDK 17 + Maven(别问为啥不用 Gradle,我们组老古董项目全用 Maven,运维脚本都写死了)。打开 IDEA,新建项目时选 Spring Initializr,勾上这几个就够了:
- Spring Web(必须)
- Spring Data JPA(如果你要用数据库)
- H2 Database(开发用内存数据库,省得装 MySQL)
🤓 自嘲一下:我第一次选了一堆 Starter,结果启动报错
No qualifying bean of type 'DataSource',差点以为自己要失业了。
生成项目后,src/main/java 下有个带 @SpringBootApplication 的主类。这就是入口。接着在同包下新建一个控制器:
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "大专生也能写后端!";
}
}
运行主类,浏览器访问 http://localhost:8080/hello,看到文字就成功了。整个过程不到 10 分钟——前提是你的网络没被 Maven 卡住。
数据库?先拿 H2 练手
我们组有个内部工具要记录用户操作日志。产品说:“下周上线,数据量不大,先存着。” 我心想:这不就是 CRUD 嘛!
实体类长这样:
@Entity
@Table(name = "user_log")
public class UserLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String action;
private LocalDateTime timestamp;
// getter/setter 省略
}
Repository 接口更简单:
public interface UserLogRepository extends JpaRepository<UserLog, Long> {
}
然后在 Controller 里注入:
@Autowired
private UserLogRepository logRepo;
@PostMapping("/log")
public ResponseEntity<?> saveLog(@RequestBody Map<String, String> payload) {
UserLog log = new UserLog();
log.setAction(payload.get("action"));
log.setTimestamp(LocalDateTime.now());
logRepo.save(log);
return ResponseEntity.ok("Logged!");
}
H2 默认会建内存表,启动时加个配置就能看控制台 SQL:
spring.h2.console.enabled=true
spring.jpa.show-sql=true
访问 http://localhost:8080/h2-console,JDBC URL 填 jdbc:h2:mem:testdb,就能看到你刚插的数据。爽!
💡 真实场景:有次测试妹子跑来问我:“为什么你接口返回成功,但我查不到数据?” 我一查,发现她 POST 的 JSON 字段名和 Java Bean 对不上——少了个下划线。后来我们统一约定用
@JsonProperty,世界清净了。
别忽略性能:哪怕只是小工具
虽然只是内部系统,但领导有句话我记住了:“再小的接口,也可能被循环调用一百万次。”
比如上面的日志接口,如果前端每点一次按钮就发请求,高峰期 QPS 上百,数据库连接池可能崩。于是我做了两件事:
- 加缓存队列:用
@Async异步写库(记得开@EnableAsync) - 批量插入:攒够 50 条或 5 秒,一次性 flush 到 DB
当然,这属于进阶优化。入门阶段,先把单条 CRUD 跑通更重要。
和算法有啥关系?
你可能会问:这跟 算法 有半毛钱关系?还真有。
上周我重构一个商品推荐接口,原始逻辑是遍历所有用户行为,O(n²) 复杂度,10 万数据直接卡死。后来改成用 Redis Sorted Set 存用户兴趣分,查询复杂度降到 O(log n)。虽然主体是 Spring Boot,但核心瓶颈在算法设计。
所以别以为后端就是写接口。数据结构、时间复杂度、缓存策略——这些才是拉开差距的地方。我大专期间刷 LeetCode 虽然只过了 50 题,但在实际项目里,知道什么时候该用 HashMap 而不是 List,真的能救命。
简历怎么写?别吹牛,写清楚场景
很多同学在简历上写:“精通 Spring Boot,熟悉微服务架构”。结果面试一问“Bean 的生命周期”,当场哑火。
我的建议是:写你真正用过的,加上业务背景。比如:
- 使用 Spring Boot 开发内部运营工具,支持日均 5k 请求,通过异步日志+H2 内存库实现低延迟响应
- 优化用户行为查询接口,将响应时间从 2s 降至 200ms,引入本地缓存与分页策略
HR 可能不懂技术,但面试官一看就知道你是不是真干过活。
最后:别怕从“抄”开始
我第一版代码全是抄 Stack Overflow 和官方示例。但抄完我会改三遍:删掉不用的依赖、重命名变量、加注释说明为什么这么写。久而久之,就变成自己的东西了。
Spring Boot 的哲学就是“约定优于配置”。你不需要一开始理解所有原理(比如自动配置怎么工作的),先让它跑起来,再回过头看 spring.factories 或 @ConditionalOnClass。底层原理很重要,但别让它成为你动手的障碍。
快速上手 Checklist(60 分钟版)
| 步骤 | 关键动作 | 常见坑 |
|---|---|---|
| 1. 创建项目 | 用 Spring Initializr,只选必要模块 | 别乱加 Security、Actuator 等 |
| 2. 写 Controller | 用 @RestController + @GetMapping |
注意路径前缀别重复 |
| 3. 连数据库 | 用 H2 开发,JPA 自动生成表 | 实体类必须有无参构造 |
| 4. 测试接口 | 用 Postman 或 curl | JSON 字段名要匹配 |
| 5. 看日志 | 开启 show-sql 和 H2 控制台 |
日志级别设为 DEBUG 更清晰 |
现在回头看,那个被逼上梁山的夜晚,反而成了我技术栈突破的关键节点。Spring Boot 没那么可怕,它只是帮你把 Java EE 那套繁琐的配置自动化了而已。真正的挑战从来不是框架,而是你面对未知时,愿不愿意点开第一个官方文档。
如果你也是非科班出身,正在为简历发愁——别焦虑。我靠前端入职,现在前后端都能撸,去年还涨了薪。技术这行,走得慢不怕,就怕站着不动。
对了,今天又是 8 点起床写代码的一天。窗外阳光正好,咖啡已续第三杯。希望这篇水文,能让你少熬一个通宵。

评论 0