我在动态更改grails 3 Web应用程序的contextPath时遇到问题。如果我在groovy.gsp(server.contextPath =“/ myApp”)中对其进行更改,则它可以正常工作,但是我需要使用这样的不同名称来部署它:

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

可以获取目录名称(llike:“myApp_A”为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”)。

我认为我必须更早更改它(在引导中为时已晚),或直接在ServletContext中更改它。将Holders.config.'server.contextPath'更改为新路径后,servletContext仍包含旧的静态路径(servletContext.getContextPath() =旧路径)。

在:
class Application extends GrailsAutoConfiguration implements EnvironmentAware {
...

在创建ServletContext之前,我可以阅读我的设置并将其注入(inject)。有什么想法可以在其中设置contextPath吗?

问候,
格雷斯范

最佳答案

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

您可以设置server.contextPath =“path_a”。

所以

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

09-04 06:24