Grails:WAR文件部署:查找端口

时间:2015-01-12 19:42:05

标签: tomcat grails groovy

我在服务器中运行作为WAR文件的Grails 2.3.6应用程序。目前它正在Tomcat 7中运行。

将来我们可能也会在其他服务器上运行该应用程序。

现在我面临的问题是独一无二的。在其中一个服务groovy文件中,我需要获取正在运行的应用程序的端口号。

对于Tomcat,端口号在 server.xml 中设置,一种可能的方法是从那里读取。

但我正在寻找更通用的解决方案。因此,即使WAR文件部署在其他类型的服务器中,我也可以获得端口号。

欢迎任何建议!

3 个答案:

答案 0 :(得分:3)

端口(单数)不一定定义明确,例如您可以让Tomcat配置多个连接器,监听不同的端口,或同时提供http和https。在特定请求的上下文中,您可以谈论收到该请求的“端口”,但如果您的应用程序位于反向代理或负载均衡器后面会发生什么......

唯一可靠的方法是在配置文件中手动指定相应的端口号/ URL /(例如grails.config.locations外部)。

答案 1 :(得分:1)

您可能需要将grails.serverURL配置属性设置为应用程序的基础根。在development环境中,这通常类似于

grails.serverURL = "https://localhost:8080/example"

并在production环境中

grails.serverURL = "https://example.org"

如果你没有正确设置,某些事情不会奏效,例如:生成绝对URL。如果正确设置了此属性,则在服务中获取端口非常简单:

class MyService {

  def grailsApplication

  Integer getPort() {
    String basePath = grailsApplication.config.grails.serverURL
    // parse out the path (exercise for reader)
  }
}

答案 2 :(得分:1)

如果你需要服务中的端口,你可以从HttpServletRequest获取它,如下所示:

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest()
def port = request.getServerPort()