从Android转Flutter后我用60分钟撸了个Spring Boot服务
做移动端五年,从Android原生转到Flutter也有两年。最近后端组走了两个人,我被临时抓去顶一个内部工具的后端。需求不复杂:给运营做活动配置的CRUD后台,接口五六个。但我上一次写Java还是大学毕设,留给我的时间只有周五下班前。
快速上手的真实路径
我定了60分钟倒计时。移动端做久了有个习惯:先把环境跑起来,别一上来就啃文档。
第一步让GitHub Copilot生成项目骨架。在VS Code里对话:“帮我创建一个Spring Boot 3.x项目,包含Web依赖和MySQL驱动”。它列出完整pom.xml,我复制到本地用Maven构建。小坑:Copilot给的版本太新,本地JDK是17,它给了需要JDK 21的版本,启动报UnsupportedClassVersionError。别盲目复制,先确认环境。
项目跑起来后,我做了件很“移动端思维”的事:先用最暴力的方式打通数据链路。一个Controller直接返回假数据,不连数据库,先让前端调通接口。很多教程一上来就配JPA、建Entity、写Repository,但对快速上手来说,先跑通HTTP层最重要。
接口设计上的性能考量
内部工具QPS不高,但也不能太随意。建了两张表:activity_config和activity_rule,一对多。列表接口要不要联表查规则?
我的做法是列表只查主表,详情才查关联规则。列表页只展示名称、时间、状态,规则数据很大(JSON奖励配置),全查纯属浪费。这跟Flutter列表懒加载一个思路:首屏只渲染可见项。
索引方面,给status和start_time建联合索引。运营最常按状态筛选加时间范围,联合索引覆盖90%查询场景。
A2A协议带来的启发
Copilot推荐了个叫A2A(Agent-to-Agent)的东西,Google推的智能体间通信协议。它的理念让我重新审视这个项目:前端Flutter和后端Spring Boot,本质也是两个“代理”在通信。接口设计清晰、请求响应结构明确,未来换框架甚至接入AI Agent调用都没障碍。
所以我统一封装了请求响应结构:统一错误码、分页格式、成功响应体。写起来麻烦,联调时前端会感谢你。
踩坑记录
60分钟里约20分钟在跟环境搏斗。除了JDK版本,还有Maven依赖下载慢,换了阿里云镜像后速度起飞。
另一个坑是application.yml缩进。YAML对缩进极其敏感,少敲一个空格,数据源配置不生效,启动报Failed to configure a DataSource。排查十分钟才发现,当时想砸键盘。
最终效果
实际花了75分钟,多出的15分钟全在JDK版本和YAML缩进上。接口全部跑通,Flutter前端成功调到数据。领导说了句“移动端也能写后端啊”,算过关了。
这次让我对Spring Boot有了新认识:适合快速开发,约定大于配置,新手能很快上手。配合Copilot,写Java体验比想象中好。性能优化思路跨语言相通:能少查就少查,能缓存就缓存,能异步就异步。
以后真要转全栈,可能会把A2A那套思想用起来,把后端设计得更灵活。但短期内还是先把手头Flutter性能优化做完,移动端才是主场。

评论 0