前言:SpringApplication 是 SpringBoot 启动核心,负责初始化容器、加载配置、启动内嵌服务器、管理应用生命周期。
所有方法分为两类:SpringApplication 实例方法 、SpringApplicationBuilder 流式方法
一、基础核心启动方法
1.1 run() 启动方法
完整代码示例
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);
}
}
核心作用
SpringBoot 最核心启动方法,自动完成一系列初始化操作:加载启动类、扫描包组件、加载自动配置、创建Spring上下文、启动内嵌Tomcat、加载yml/properties配置、完成项目启动。
适用场景
-
所有 SpringBoot 基础项目、新手开发、快速原型搭建
-
无需任何自定义启动配置的标准业务项目
-
课程作业、演示项目、小型单体应用
二、环境配置类常用方法(重点)
2.1 setWebApplicationType() / web() 设置应用运行类型
可选参数枚举
-
WebApplicationType.SERVLET:默认,传统Web项目,启动Tomcat容器
-
WebApplicationType.NONE:非Web项目,不启动Tomcat,纯后台程序
-
WebApplicationType.REACTIVE:响应式Web项目,适配WebFlux
代码示例(非Web定时任务项目)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TaskApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(TaskApplication.class);
// 设置为非Web项目,关闭Tomcat
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
}
核心作用
手动指定项目运行环境,按需开启/关闭Web容器,避免加载多余组件,节省内存、加快启动速度。
适用场景
-
NONE:定时任务服务、消息消费服务、后台守护进程、工具类项目
-
SERVLET:常规接口项目、后台管理系统、Web服务
-
REACTIVE:高并发响应式接口、网关服务、实时数据流项目
三、日志与界面优化方法
3.1 setBannerMode() / bannerMode() 控制启动横幅
可选参数
-
Banner.Mode.CONSOLE:默认,控制台打印横幅
-
Banner.Mode.LOG:将横幅输出到日志文件
-
Banner.Mode.OFF:关闭启动横幅
代码示例(企业生产标配)
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
// 关闭启动横幅,整洁日志
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
核心作用
控制SpringBoot启动艺术字横幅的输出方式,生产环境关闭冗余日志,让启动日志更简洁规范。
适用场景
-
生产环境、容器化Docker/K8s部署、日志采集项目(关闭横幅)
-
测试环境、本地开发环境(默认开启,便于观察启动状态)
-
自定义项目版本横幅、定制启动标识场景
四、性能优化类核心方法
4.1 setLazyInitialization() / lazyInitialization() 全局懒加载
代码示例
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
// 开启全局Bean延迟初始化
application.setLazyInitialization(true);
application.run(args);
}
}
核心作用
默认false(启动时初始化所有Bean);设置true后,所有Bean在第一次被调用时才初始化,大幅缩短项目冷启动时间,减少启动内存占用。
适用场景
-
大型多模块项目、微服务项目,解决启动缓慢问题
-
本地高频调试、频繁重启测试的开发场景
-
云原生容器弹性扩容、快速启动上线场景
使用注意
开启后首次接口请求会变慢,启动阶段无法发现Bean初始化异常,生产环境不建议全局随意开启。
五、安全与部署适配方法
5.2 addCommandLineProperties() 命令行参数覆盖控制
代码示例
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
// 关闭命令行参数覆盖,提升生产安全性
application.setAddCommandLineProperties(false);
application.run(args);
}
}
核心作用
默认true,允许启动时通过命令行参数 --key=value 覆盖配置文件参数;设置false后,禁止命令行篡改项目配置。
适用场景
-
生产环境:关闭功能,防止运维、部署操作误改核心配置
-
测试/开发环境:开启功能,灵活动态修改端口、超时时间、功能开关
-
CI/CD自动化部署、固定配置上线的项目
5.2 setRegisterShutdownHook() 优雅停机钩子
代码示例
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
// 开启JVM关闭钩子,实现优雅停机
application.setRegisterShutdownHook(true);
application.run(args);
}
}
核心作用
默认开启,项目接收关闭信号时,自动执行资源释放:关闭数据库连接、停止消息队列消费、结束未完成事务、释放线程池资源,避免数据丢失和脏数据。
适用场景
-
支付、订单、交易等核心业务项目
-
微服务、容器化K8s滚动更新、优雅下线场景
-
涉及数据库、Redis、MQ等中间件连接的项目
六、高阶扩展方法(架构定制)
6.1 addListeners() 注册应用生命周期监听器
代码示例
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
// 注册容器刷新完成监听
application.addListeners((ApplicationListener<ContextRefreshedEvent>) event -> {
System.out.println("项目启动完成,执行初始化操作:加载缓存/初始化字典/注册监控");
});
application.run(args);
}
}
核心作用
监听Spring应用全生命周期事件(启动、刷新、关闭、就绪),在项目启动完成后自定义执行初始化业务逻辑,解耦启动代码。
适用场景
-
项目启动初始化数据字典、本地缓存、定时任务
-
服务启动注册监控、日志初始化、健康检查配置
-
自定义脚手架、基础架构统一后置处理逻辑
七、企业主流流式写法整合(SpringApplicationBuilder)
SpringBoot3 官方主推、全网推荐写法,链式调用整合所有常用参数,代码整洁统一,适合企业正式项目。
整合实战代码
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 流式链式统一配置所有启动参数
new SpringApplicationBuilder(Application.class)
.bannerMode(Banner.Mode.OFF) // 关闭启动横幅
.lazyInitialization(false) // 关闭全局懒加载(生产安全)
.addCommandLineProperties(false) // 禁止命令行篡改配置
.registerShutdownHook(true) // 开启优雅停机
.run(args);
}
}
适用场景
所有企业级业务项目、微服务、云原生项目、团队规范化开发场景。
八、常用方法参数速查表
| 核心方法 | 核心作用 | 常用配置值 | 核心适用场景 |
|---|---|---|---|
| setWebApplicationType() | 设置项目运行环境 | SERVLET/NONE/REACTIVE | 定时任务、Web接口、响应式服务适配 |
| setBannerMode() | 控制启动横幅日志 | OFF/CONSOLE/LOG | 生产日志整洁、环境差异化展示 |
| setLazyInitialization() | 全局Bean延迟加载 | true/false | 本地调试、大型项目提速启动 |
| setAddCommandLineProperties() | 命令行参数覆盖开关 | true/false | 生产安全管控、测试灵活调试 |
| setRegisterShutdownHook() | 优雅停机资源释放 | true/false | 核心业务、微服务容器部署 |
| addListeners() | 生命周期事件监听 | 自定义监听器 | 启动初始化、架构扩展、监控埋点 |
九、开发规范总结
-
简单项目/学习调试 :使用原生
run()极简启动方式,无需额外配置 -
常规企业项目 :使用
SpringApplicationBuilder流式写法,统一配置横幅、安全参数、优雅停机 -
性能优化场景:开发环境开启懒加载,生产环境关闭,规避启动报错后置问题
-
非Web服务:必须手动关闭Web容器,节省系统资源,避免端口占用
-
生产环境标配:关闭横幅、关闭命令行参数覆盖、开启优雅停机