Spring Boot集成Swagger后控制台打印地址、启动自动打开页面问题咨询
针对你的两个问题的解决方案如下
问题1:应用启动时控制台打印Swagger UI访问地址
你可以通过监听Spring Boot的ApplicationReadyEvent事件,在应用完全启动后读取服务配置,拼接Swagger地址后打印到控制台。Springfox 3.0.0版本的默认Swagger UI路径为/swagger-ui/index.html,实现代码如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.net.InetAddress; import java.net.UnknownHostException; @Component public class SwaggerPrintConfig implements ApplicationListener<ApplicationReadyEvent> { private static final Logger log = LoggerFactory.getLogger(SwaggerPrintConfig.class); @Value("${server.port:8080}") private int port; @Value("${server.servlet.context-path:}") private String contextPath; @Value("${server.address:127.0.0.1}") private String address; @Override public void onApplicationEvent(ApplicationReadyEvent event) { try { String hostAddress = "0.0.0.0".equals(address) ? InetAddress.getLocalHost().getHostAddress() : address; String swaggerUrl = String.format("http://%s:%s%s/swagger-ui/index.html", hostAddress, port, contextPath); log.info("Swagger UI 访问地址:{}", swaggerUrl); } catch (UnknownHostException e) { log.warn("获取本地IP失败,Swagger地址打印异常", e); } } }
添加该类后启动应用,即可在控制台看到打印的完整Swagger访问地址。
问题2:本地启动时自动打开Swagger访问地址
你可以在上述监听逻辑中新增自动打开浏览器的逻辑,建议配合多环境配置使用,仅在本地开发环境触发,避免生产环境执行该逻辑。
实现步骤
- 首先在本地开发的配置文件(
application.yml/application.properties)中指定激活开发环境配置:spring.profiles.active=dev - 修改上述SwaggerPrintConfig类,新增自动打开逻辑:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; import java.awt.*; import java.net.InetAddress; import java.net.URI; import java.net.UnknownHostException; @Component @Profile("dev") // 仅dev环境生效,生产环境不会加载该类 public class SwaggerPrintConfig implements ApplicationListener<ApplicationReadyEvent> { private static final Logger log = LoggerFactory.getLogger(SwaggerPrintConfig.class); @Value("${server.port:8080}") private int port; @Value("${server.servlet.context-path:}") private String contextPath; @Value("${server.address:127.0.0.1}") private String address; @Override public void onApplicationEvent(ApplicationReadyEvent event) { try { String hostAddress = "0.0.0.0".equals(address) ? InetAddress.getLocalHost().getHostAddress() : address; String swaggerUrl = String.format("http://%s:%s%s/swagger-ui/index.html", hostAddress, port, contextPath); log.info("Swagger UI 访问地址:{}", swaggerUrl); // 自动打开浏览器逻辑 if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); desktop.browse(new URI(swaggerUrl)); } } catch (Exception e) { log.warn("Swagger地址打印或自动打开失败", e); } } }
注意事项
- 无图形界面的Linux环境下
Desktop类会自动不可用,代码会跳过打开逻辑不会抛出异常 - 生产环境不要激活dev profile,避免触发不必要的逻辑
内容的提问来源于stack exchange,提问作者ssanga
相关产品推荐
相关产品推荐

