Grails 3,动态更改 contextPath(servletContext?)

Grails 3, change contextPath dynamically (servletContext?)

我在动态更改 grails 3 web 应用程序的 contextPath 时遇到问题。如果我在 groovy.gsp (server.contextPath = "/myApp") 中更改它,它会起作用,但我需要使用不同的名称来部署它:

myApp_A.war         =>  IP:Port/myApp_A
myApp_B.war         =>  IP:Port/myApp_B

In 可以获得目录名称(llike: "myApp_A" for myApp_A.war)并动态读取正确的属性文件(myApp_A.properties)。之后,我尝试将此实例的上下文路径动态设置为 IP:Port/myApp_A

我尝试像这样更改 bootstrap 中的 grails "server.contextPath":

Holders.config.'server.contextPath' = '/myApp_A'

但这并不完全有效。在这种情况下,我将被重定向到 IP:Port/myApp_A,但随后我得到了 404。Web 服务仍在侦听静态配置(“/myApp”)。

我觉得得早点改(在bootstrap已经来不及了),或者直接在servletContext里面改。将 Holders.config.'server.contextPath' 更改为新路径后,servletContext 仍包含旧静态路径(servletContext.getContextPath() = 旧路径)。

在:

class Application extends GrailsAutoConfiguration implements EnvironmentAware { 
...

我可以读取我的设置并在创建 servletContext 之前注入它们。有什么想法可以在那里设置 contextPath 吗?

此致, grailsfan

在 application.groovy 中编写您的逻辑以设置上下文路径。

你可以设置server.contextPath = "path_a".

所以

if ( myCondition == true ) {
    server.contextPath = "path_a"
} else {
    server.contextPath = "path_b"
}

在application.yml添加到每个环境。然后,当您为每个环境构建 WAR 时,上下文也会发生变化。

grails.serverURL: 'http://localhost:8080/myapp'
server:
  port: 8080
  contextPath: '/myapp'