我有一个Web应用程序,它依赖于一些资源和参数在安装后进行配置,如JDBC连接。如何在Tomcat中为Web应用程序提供上下文配置?
我想到的是提供一个META-INF/context.xml
,当我部署应用程序时,它被Tomcat复制到[engine-name]/[server-name]/[app-name].xml
。这样我所提供的是一个可以复制到appBase文件夹(webapps)的war文件。 Tomcat的文档says如果有这样一个文件,它不会被覆盖,这是非常好的,因为部署后所做的更改不会丢失。
但是这里有一个微妙的问题: 由于我们通过复制到webapps目录来部署应用程序,Tomcat将首先卸载现有的应用程序以及配置文件。这样配置文件将丢失/覆盖,这是不可取的。据我所知, Tomcat won't修改了此行为。
问题是: 有没有办法通过以Tomcat不会删除现有配置文件的方式安装应用程序来解决此问题。 或者,有没有更好的方式打包应用程序?
请注意,我们不希望将autoDeploy设置为false,并且我们无法使用人为干预进行安装(这会排除使用Tomcat Manager Web应用程序的情况)。
如果我从.war文件中取出配置文件并单独复制它作为[engine-name]/[server-name]/[app-name].xml
,Tomcat仍然会将其与我的应用程序关联,并在我复制新的.war文件后将其删除。
另一个假设是:我们事先不知道配置的值。我们只会提供一个示例配置(如果您愿意,可以使用占位符),而实际配置将在稍后的某个时间执行(不一定在安装时间内)。
感谢
你不能从war中移除你的context.xml文件并直接放在tomcat需要的地方?它不会被卸载并重新安装。在码头上,这是热部署的方式 – Snicolas
我试过,如果文件匹配[引擎]/[主机]/[应用] .xml模式,它被认为是应用程序的一部分,即使它不是在.war文件(o_O)中。 – n0rm1e
您不能为所有不同的环境提供构建脚本,以便在部署后不需要修改任何内容? – home