我在服务器中运行作为WAR文件的Grails 2.3.6应用程序。目前它正在Tomcat 7中运行。
将来我们可能也会在其他服务器上运行该应用程序。
现在我面临的问题是独一无二的。在其中一个服务groovy文件中,我需要获取正在运行的应用程序的端口号。
对于Tomcat,端口号在 server.xml 中设置,一种可能的方法是从那里读取。
但我正在寻找更通用的解决方案。因此,即使WAR文件部署在其他类型的服务器中,我也可以获得端口号。
欢迎任何建议!
答案 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()