[英]How to modify tomcat web.xml location per webapplication
我在我的 tomcat 服务器中部署了多个 Spring Boot 应用程序(作为战争文件)。 我的问题是我想为某些 web 应用程序自定义 tomcat 的默认session-timeout
(即,不编辑全局$CATALINA_BASE/conf/web.xml
)。
我搜索并阅读了 tomcat 文档。 似乎我可以实现的唯一方法是在需要不同session-timeout
值的 war 文件中创建/WEB-INF/web.xml
。 但是我们不会在我们的源代码库中存储特定于应用程序的web.xml
配置。
所以我想要做的是创建一个目录,我将在其中存储所有 webapp 特定的web.xml
文件,并告诉 tomcat 从那里加载web.xml
文件,而不是从我的战争的/WEB-INF/web.xml
位置加载。
例子:
对于 webapp A.war
, B.war
我想要一个目录$CATALINA_BASE/webxmls
里面有两个 web.xml 像A_web.xml
和B_web.xml
。 Tomcat 将加载这些 web.xml 忽略 war 的默认/WEB-INF/web.xml
路径。
您可以通过以下方式更改 web.xml 的路径
<Context docBase="****" altDDName="$CATALINA_BASE/webxmls.xml">
我通过为每个 webapp 创建单独的context.xml
解决了这个问题。 根据 tomcat docs context.xml
有一个名为altDDName
的属性,它可以覆盖该 webapp 的web.xml
的绝对路径。 根据 tomcat文档:
别名
此上下文的备用部署描述符的绝对路径。 这将覆盖位于 /WEB-INF/web.xml 的默认部署描述符。
所以在altDDName
设置我的外部web.xml
的绝对路径将允许我在外部存储我所有的 webapp 特定的web.xml
s。
例子:
假设我有两个应用程序A.war
和B.war
。 我的 tomcat 托管在 localhost 中。 我在$CATALINA_BASE/conf/Catalina/localhost/A.xml
& $CATALINA_BASE/conf/Catalina/localhost/B.xml
创建了两个单独的context.xml
,具有以下属性:
A.xml
<Context altDDName="$CATALINA_BASE/webxmls/A_web.xml">
</Context>
和类似的B.xml
:
<Context altDDName="$CATALINA_BASE/webxmls/B_web.xml">
</Context>
现在在$CATALINA_BASE/webxmls/A_web.xml
我可以存储我的外部web.xml
,在那里我可以覆盖 webapp 特定的session-timeout
:
A_web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
同样创造新B_web.xml
为B.war
。
我希望有比这更好的解决方案。 但它解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.