我开发了一个在Tomcat服务器上的Spring容器内运行的小型REST API。作为我的启动序列的一部分,我需要能够将基本URL转储到日志文件中:
sort-order
将显示
String myUrl = ...
LOGGER.info("My URL is {}", myUrl);
这将在第一次调用API之前发生。应用程序启动后,我可以检查日志并使用My URL is http://myHostname:8080/myContext/url-pattern
或curl
检查应用是否正在响应。
我见过的所有解决方案都依赖于wget
,但这需要调用REST接口
理想情况下,我想从注入我班级的Spring对象中获取完整的模式,但是如果不存在这样的对象,我不介意从不同的来源构建信息。
到目前为止,我已阅读:
HttpServletRequest
InetAddress.getLocalHost().getHostName();
我仍然需要从某个地方获取端口和servletContext.getContextPath()
(在web.xml中定义)。
注意:据我所知,当我将主机置于负载均衡器后面时,我的REST API域不会与myHostname匹配,而且可以。
答案 0 :(得分:0)
如果您使用的是WebApplicationInitializer
而不是web.xml
,则可以使用onStartup
方法获取上下文对象。
public class WebMVCApplicationInitializer implements
WebApplicationInitializer {
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
ServletRegistration.Dynamic registration =
container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("*.request");
}
}
然后,您可以调用getRealPath
方法获取服务器文件系统上的绝对文件路径。参考ServletContext
:here