Spring Boot 入门:Java 生态最流行的应用开发框架介绍

22 阅读5分钟

Spring Boot 是 Java 生态里现在最火的应用开发框架,GitHub 星标超过 7 万,它让你不用折腾 Spring 那一堆配置,就能快速启动一个 Java 应用,现在微服务开发基本都用它。

我用 Spring Boot 写过不少后端项目,从单体到微服务都试过,确实解决了很多老 Spring 项目的痛点,聊聊它到底好在哪。

Spring Boot 解决了什么问题

早年用 Spring 开发,配置文件写半天,各种 XML 配置来回调,依赖引入经常版本冲突,一个新项目搭建要花大半天,开发体验很差。

Spring Boot 的理念是”约定优于配置”,创建项目时它给你默认配置好,常用的库帮你选好版本,不会冲突,你只需要写业务代码就行。

想要加什么功能,只要引入一个 Starter 依赖,不用自己找一堆 jar 包,也不用管版本兼容,它都给你处理好了。内嵌 Tomcat、Jetty,打包完直接 java -jar 就能跑,不用再部署到外部容器,部署都简单很多。

基础项目例子

创建一个项目最简单就是去 start.spring.io 选依赖下载,或者用 IDE 直接创建。也可以手动写:

<!-- pom.xml -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
// DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }

    @GetMapping("/hello/{name}")
    public String helloName(String name) {
        return "Hello, " + name + "!";
    }
}

打包运行:

mvn package
java -jar target/demo-0.0.1-SNAPSHOT.jar
# 访问 http://localhost:8080/hello 就能看到结果

就这么点代码,一个 Web 应用跑起来了。不用配置 web.xml,不用配置 Tomcat,什么都不用,写完直接运行。

核心好用的特性

自动配置

你引入 spring-boot-starter-web,它自动给你配置好 DispatcherServlet、JSON 转换器、视图解析器,你不用管这些东西怎么配,直接用就行。

引入数据库连接池,它根据你的依赖自动判断用 HikariCP 还是 Tomcat JDBC,默认配置都给你弄好,需要改才去配置文件改参数。

Starter 依赖

想要什么功能就加对应的 Starter,比如用 Spring Data JPA 访问数据库,加 spring-boot-starter-data-jpa;要做验证,加 spring-boot-starter-validation。依赖版本不用你管,Spring Boot 父项目已经帮你管理好了,不会出现版本冲突。

内嵌容器

默认内嵌 Tomcat,也可以换成 Jetty 或者 Undertow。应用打包成一个可执行的 jar 包,直接 java -jar 就能启动,不用往 Tomcat 里放 war 包,开发部署都方便很多。

生产就绪

自带 Actuator 模块,引入就能给你提供健康检查、指标监控、环境信息这些端点,运维监控方便很多,上线后不用自己搭这些东西。

哪些场景用 Spring Boot

Java 后端服务,不管是单体应用还是微服务,现在基本都用 Spring Boot,开发速度快,生态成熟。

微服务架构,配合 Spring Cloud,一套下来服务发现、配置中心、熔断降级都有,整套解决方案成熟,大厂小公司都在用。

企业内部应用,Java 企业开发现在基本上就是 Spring Boot 天下,各种后台管理系统、ERP、CRM 都能快速开发出来。

云原生应用,Spring Boot 应用打包方便,镜像体积也能做小,适合容器部署,Kubernetes 上跑很顺。

Spring Boot 有哪些优缺点

最大的好处就是开发快,配置少,搭项目从几天变几分钟,你专心写业务就行。生态太成熟了,你能想到的功能基本都有对应的 Starter,出了问题网上一搜全是解决方案,找资料很容易。

社区活跃,Pivotal 团队一直在维护更新,Spring 整个生态更新都很快,新特性加得勤快,安全补丁也及时。和云原生适配得好,现在各大云厂商都对 Spring Boot 有专门优化,部署扩容都方便。

缺点也有。如果你不会 Spring 直接学 Spring Boot,很多底层原理你可能搞不懂,出了问题不知道怎么调,只会加 Starter 不会看配置。

默认打包出来 jar 包还是有点大,启动速度对比 Go 这些语言还是慢一些,冷启动时间长,Serverless 场景不太占优势。自动配置方便,但真要自定义配置的时候,有时候得找半天才能找到配置项在哪,不如原生配置那样一目了然。

现在 Spring Boot 发展得怎么样

出来这么多年,现在已经是 Java 开发事实标准了,不管大厂小公司做 Java 后端,基本都用 Spring Boot。Spring 6 搭配 Spring Boot 3 已经出来了,Jakarta EE 迁移完,一直保持更新。

云原生时代,Spring Boot 也在跟进,GraalVM 原生镜像支持,启动速度快很多,镜像体积变小,适应 Serverless 场景。

岗位需求也多,Java 后端开发基本上都要求会 Spring Boot,找工作这块不愁。

现在学 Spring Boot 值得吗

如果你做 Java 后端开发,那肯定要学。现在不用 Spring Boot 的项目真不多了,不会找工作都难。

开发体验比老 Spring 好太多,同样功能比以前少写一半配置,时间都能用在业务上。就算你做微服务,Spring Cloud 也是基于 Spring Boot 的,学会 Spring Boot 再学 Spring Cloud 就很顺。

Java 生态现在就是 Spring Boot 主导,学会了不管做什么项目都能用得上,找工作也加分。