SpringBoot SpringApplication 常用方法与参数大全

前言: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() 生命周期事件监听 自定义监听器 启动初始化、架构扩展、监控埋点

九、开发规范总结

  1. 简单项目/学习调试 :使用原生run() 极简启动方式,无需额外配置

  2. 常规企业项目 :使用 SpringApplicationBuilder 流式写法,统一配置横幅、安全参数、优雅停机

  3. 性能优化场景:开发环境开启懒加载,生产环境关闭,规避启动报错后置问题

  4. 非Web服务:必须手动关闭Web容器,节省系统资源,避免端口占用

  5. 生产环境标配:关闭横幅、关闭命令行参数覆盖、开启优雅停机