You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Maven Web API:解决Swagger自动打开重复弹窗问题

解决Spring Boot热重载重复打开Swagger页面的方案

核心思路

VS Code热重载时Spring Boot会重启应用上下文,导致原有的浏览器启动代码重复执行。我们可以通过区分首次启动和热重载重启,只在首次启动时打开Swagger页面,避免重复弹窗。

方案一:利用Spring Boot DevTools的重启标记

Spring Boot DevTools在热重载重启时会自动设置系统属性spring.devtools.restart.active为true,首次启动时该属性不存在(默认false)。基于此判断是否执行浏览器启动逻辑:

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.awt.Desktop;
import java.net.URI;

@Component
public class BrowserLauncherConfig implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 仅在非热重载的首次启动时打开浏览器
        boolean isRestart = Boolean.getBoolean("spring.devtools.restart.active");
        if (!isRestart && Desktop.isDesktopSupported()) {
            Desktop.getDesktop().browse(new URI("http://localhost:8080/swagger-ui/index.html"));
        }
    }
}

确保你的Maven依赖中已引入devtools:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

方案二:基于应用启动事件的单例控制(兼容无devtools场景)

如果未使用devtools,可以通过静态标记记录是否已执行过浏览器启动逻辑。注意:该方案仅适用于无devtools的热重载场景,若使用devtools,热重载会重新加载类导致静态标记重置,此时方案一更可靠:

import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import java.awt.Desktop;
import java.net.URI;

@Component
public class BrowserLauncherConfig {
    private static boolean hasLaunched = false;

    @EventListener(org.springframework.boot.context.event.ApplicationStartedEvent.class)
    public void launchSwagger() throws Exception {
        if (!hasLaunched && Desktop.isDesktopSupported()) {
            Desktop.getDesktop().browse(new URI("http://localhost:8080/swagger-ui/index.html"));
            hasLaunched = true;
        }
    }
}

说明

直接检查浏览器是否已打开指定Swagger页面的方案需要依赖跨平台的系统命令(如Windows的tasklist、Mac的ps),实现复杂且兼容性差,上述基于Spring自身标记的方案更简洁可靠,无需依赖本地存储或配置文件。

内容的提问来源于stack exchange,提问作者CrazyEight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:57:15