如何在Spring Boot启动日志中显示WebApplicationContext访问链接
Spring Boot启动时输出可点击访问链接实现方法
核心逻辑是在应用完全启动完成后,读取已加载的Web配置拼接完整URL打印到日志,主流IDE控制台会自动识别http/https开头的URL渲染为可点击链接,不需要额外做特殊格式处理。
实现步骤
直接注册一个应用就绪事件的监听器,等Web服务、上下文全部初始化完成后再读取配置拼接地址,避免拿到未解析的配置占位符:
import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @Slf4j @Component public class StartupUrlPrinter implements ApplicationListener<ApplicationReadyEvent> { @Override public void onApplicationEvent(ApplicationReadyEvent event) { Environment env = event.getApplicationContext().getEnvironment(); // 识别是否开启HTTPS String protocol = env.getProperty("server.ssl.key-store") == null ? "http" : "https"; // 读取端口,默认8080 String port = env.getProperty("server.port", "8080"); // 读取上下文路径,Servlet应用取这个配置 String contextPath = env.getProperty("server.servlet.context-path", ""); // WebFlux响应式应用把上面这行换成下面这行即可 // String contextPath = env.getProperty("spring.webflux.base-path", ""); // 处理默认绑定地址,0.0.0.0替换为localhost方便本地访问 String host = env.getProperty("server.address", "localhost"); if ("0.0.0.0".equals(host)) { host = "localhost"; } String accessUrl = String.format("%s://%s:%s%s", protocol, host, port, contextPath); log.info("\n========================================\n\t应用已启动,访问地址:{}\n========================================", accessUrl); } }
注意事项
- 不要在Bean初始化的早期阶段(比如
@PostConstruct、InitializingBean接口里)读取配置拼地址,这时候Web服务器还没完成启动,可能拿到未替换的配置占位符,或者端口、上下文路径值不准。 - 不需要额外给日志加HTML标签(比如
<strong>),控制台日志是纯文本渲染,加了标签反而会把标签原文打出来,只要URL是http://开头的标准格式,IDEA、VS Code、Eclipse等常用开发工具都会自动识别为可点击链接。 - 如果不需要自定义日志格式,Spring Boot 2.3及以上版本默认在Info日志级别下,已经会在Tomcat/Netty启动完成后输出端口、上下文路径信息,只是没有拼成完整链接而已。
内容的提问来源于stack exchange,提问作者Cartagho07
相关产品推荐
相关产品推荐

