Spring Boot入门教程:60分钟快速上手?别信,但能跑起来

Gradle别卡了
2025-12-16 20:11
阅读 727

上周五下午4点半,刚泡好一杯枸杞茶准备迎接周末,组长突然在钉钉群里@我:“小张,下周三之前搞个简单的内部审批流程接口,就两个表,别整太复杂。” 我内心OS:又来?上次那个“简单配置页面”最后上线前改了七轮需求,测试还报了三个P0级Bug。

不过咱是国企程序员,主打一个情绪稳定(其实是躺平习惯了)。反正双休雷打不动,加班?不存在的。但活总得干完,于是翻出尘封已久的Spring Boot项目模板——没错,就是那个去年双11期间被临时抓壮丁做促销接口时用过的老伙计。

今天这篇技术分享,不整那些花里胡哨的“60分钟从零到部署”,毕竟咱们不是培训机构。我就以一个Vim党、两年工龄、最近偷偷学AI的普通后端开发视角,聊聊怎么快速把Spring Boot跑起来,并且别让运维半夜打电话骂你


为啥又是Spring Boot?

说实话,我司技术栈有点“复古”。主力还是Spring MVC + MyBatis的老组合,XML配得比产品经理的需求文档还长。但新项目领导要求“拥抱现代化”,于是Spring Boot成了政治正确。

好处很明显:

  • 自动配置省掉80%样板代码
  • 内嵌Tomcat,不用求着运维搭环境
  • Actuator监控开箱即用,线上排查少背锅

坏处?也明显。比如默认日志格式看着难受,Jackson序列化规则和老系统对不上,还有……启动慢得像我家楼下那台永远排不上队的咖啡机

但架不住它生态成熟啊!我们组最近做的几个小工具(比如自动生成Excel报表、对接OA审批流),全靠Spring Boot快速交付。关键是真的不用加班——只要别碰上产品经理突发奇想。


起手式:别被“快速上手”骗了

网上教程总说“一行代码启动Web服务”,但现实是:你复制粘贴完,发现连数据库都连不上。所以我建议新手直接用 start.spring.io 生成项目骨架,至少依赖版本不会打架。

我常用的起步依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId> <!-- 或 mybatis-spring-boot-starter -->
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

吐槽一句:JPA虽香,但我司DBA坚持用MyBatis,说是“SQL可控”。行吧,尊重传统。


配置文件:别再用application.properties了!

我知道很多教程还在教properties写法,但YAML才是人类友好的选择。特别是当你要配多环境、多数据源的时候,properties会把你逼疯。

我的标准 application.yml 结构:

spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/approval?useSSL=false&serverTimezone=Asia/Shanghai
    username: ${DB_USER}
    password: ${DB_PASS}
  jpa:
    hibernate:
      ddl-auto: validate # 生产环境绝对不能是create!
    show-sql: false

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics # 别暴露所有端点!安全第一

logging:
  level:
    com.mycompany: INFO
    org.springframework.web: WARN

重点来了

  • 数据库密码千万别硬编码!用环境变量或配置中心
  • ddl-auto: validate 是底线,否则哪天误设成 update,线上表结构被改了,你就等着写事故报告吧
  • Actuator只开放必要端点,上次隔壁组开了shutdown,被安全扫描扫出来,整个部门通报批评……

接口设计:别一上来就RESTful

很多人觉得Spring Boot = REST API,但内部系统真不需要那么规范。我们审批流接口就两个核心方法:

@RestController
@RequestMapping("/api/v1/approval")
public class ApprovalController {

    @Autowired
    private ApprovalService approvalService;

    // 提交审批
    @PostMapping("/submit")
    public ResponseEntity<?> submit(@RequestBody SubmitRequest req) {
        try {
            approvalService.submit(req);
            return ResponseEntity.ok().build();
        } catch (BusinessException e) {
            return ResponseEntity.badRequest().body(e.getMessage());
        }
    }

    // 查询状态(给前端轮询用)
    @GetMapping("/status/{taskId}")
    public ApprovalStatus getStatus(@PathVariable String taskId) {
        return approvalService.getStatus(taskId);
    }
}

注意几点:

  • 返回类型别用 Object,明确 ResponseEntity 更利于错误处理
  • 异常统一用 @ControllerAdvice 拦截,别在每个方法里写try-catch
  • 路径别带版本号 /v1 —— 我们内部系统生命周期短,加版本纯属自找麻烦

数据库设计:主键别再用自增ID了!

这是血泪教训。去年有个表用 BIGINT AUTO_INCREMENT,结果分库分表改造时哭晕在厕所。现在我们新项目统一用 雪花算法(Snowflake)生成ID,虽然要自己维护workId,但长远看省事。

另外,字段命名全部小写+下划线,和MySQL保持一致。别搞什么驼峰,MyBatis映射时容易漏配,线上查不到数据又是一场灾难。

表结构示例(简化版):

字段名 类型 说明
id BIGINT 雪花ID
task_code VARCHAR(32) 审批单号,业务唯一
status TINYINT 状态:0-待提交 1-审批中 2-通过 3-拒绝
creator VARCHAR(20) 创建人工号
create_time DATETIME 创建时间

性能与监控:别等上线才想起来

Spring Boot应用最容易犯的错就是:本地跑得飞快,一上生产就卡成PPT。原因往往是:

  1. 没关调试日志show-sql: true 在生产环境等于自杀
  2. 连接池配置不合理:HikariCP默认最大连接20,高并发直接爆
  3. 没加缓存:重复查同一个审批状态,每次都打数据库

我们的生产配置片段:

spring:
  datasource:
    hikari:
      maximum-pool-size: 50
      minimum-idle: 10
      connection-timeout: 3000

再加上Actuator的 /actuator/metrics,配合Prometheus+Grafana,CPU、内存、请求延迟一目了然。运维大哥看了都说好,再也不用半夜打电话问“是不是你们程序又OOM了?”


部署:Docker是底线

别再手动传jar包了!写个Dockerfile,一行命令搞定:

FROM openjdk:17-jdk-slim

COPY target/approval-service.jar /app.jar
EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/app.jar"]

然后Jenkins一键构建推送。我们组甚至把Docker镜像和Git分支挂钩——dev 分支推到测试环境,main 合并后自动上线。从此告别“在我机器上是好的”这种鬼话


最后说点人话

Spring Boot确实能让你快速产出可用服务,但它不是银弹。我见过太多人以为用了Spring Boot就等于“现代化架构”,结果接口没鉴权、SQL没索引、日志没脱敏,上线三天就漏洞百出。

作为国企程序员,我图的不是技术多酷炫,而是稳、省事、不背锅。Spring Boot帮我省去了大量胶水代码,让我能把精力放在业务逻辑和边界case上——比如审批人离职了怎么办?超时自动通过吗?这些才是产品经理真正甩不掉的锅。

至于“60分钟上手”?别信。但如果你已经有Java基础,花两小时搞懂自动配置、外部化配置、Starter机制,再结合公司现有规范调整,基本就能安全交付任务了

对了,最近我在研究怎么把大模型接入审批流做智能判断(比如自动识别报销单是否合规),所以还得啃Spring AI。不过那是下篇文章的事了——先让我把这周的需求干完,周末还得陪娃去上编程课呢(是的,我也开始卷下一代了)。


附:避坑清单(血泪总结)

坑点 正确做法
本地用H2数据库,生产用MySQL 所有环境用同一数据库类型
默认使用内嵌H2控制台 生产禁用 /h2-console
Controller直接返回实体类 用DTO隔离内部模型
忘记全局异常处理 @ControllerAdvice + 自定义异常
日志打印敏感信息 脱敏中间件 or 手动过滤
启动类放根包外 主类必须在最外层包,否则组件扫不到

好了,茶凉了,下班。

评论 0

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