Spring Rest:在第一次调用之前获取主机基URL

时间:2017-12-05 16:48:51

标签: java spring rest spring-mvc

我开发了一个在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对象中获取完整的模式,但是如果不存在这样的对象,我不介意从不同的来源构建信息。

到目前为止,我已阅读:

  • myHostname - HttpServletRequest
  • myContext - InetAddress.getLocalHost().getHostName();

我仍然需要从某个地方获取端口和servletContext.getContextPath()(在web.xml中定义)。

注意:据我所知,当我将主机置于负载均衡器后面时,我的REST API域不会与myHostname匹配,而且可以。

1 个答案:

答案 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方法获取服务器文件系统上的绝对文件路径。参考ServletContexthere