Tomcat自动部署WAR时Context文件被删除问题求助
解决Tomcat自动部署WAR时删除Context配置文件的问题
方法1:关闭Tomcat自动部署
修改Tomcat的conf/server.xml里的<Host>节点,设置autoDeploy和deployOnStartup为false:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
这样Tomcat不会自动处理WAR包的部署,你的appname.xml和appname-dev.xml就不会被删除。但后续更新WAR需要手动操作,比如重启Tomcat或者手动复制WAR到webapps目录后重启。
方法2:把Context配置移到非自动管理目录
Tomcat的自动部署只会清理conf/Catalina/localhost目录下的文件,你可以给<Host>指定一个自定义的配置目录:
修改conf/server.xml的<Host>节点,添加xmlBase属性指向新目录,比如conf/Catalina/localhost-custom:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlBase="conf/Catalina/localhost-custom">
然后把你的两个Context文件移到这个新目录里,Tomcat会正常加载配置,且自动部署时不会动这个目录的文件。
方法3:把Context参数打包进WAR包
在Spring Boot项目的src/main/webapp/META-INF目录下创建context.xml,写入需要的参数:
<Context> <Parameter name="your-param-key" value="your-param-value" override="false"/> <!-- 其他环境参数 --> </Context>
这样WAR包自带配置,不需要外部Context文件。如果要区分生产和开发环境,用Maven Profile分别打包不同的配置:
- 生产环境:把
src/main/resources/prod/context.xml复制到META-INF - 开发环境:把
src/main/resources/dev/context.xml复制到META-INF
在pom.xml里配置Profile实现自动复制即可。
方法4:用全局Context配置
修改conf/context.xml,添加全局参数或者指定应用的Context配置:
<Context> <!-- 全局通用参数 --> <Parameter name="common-db-url" value="jdbc:mysql://localhost:3306/db" override="false"/> <!-- 针对生产环境应用的配置 --> <Context docBase="webapps/appname.war" path="/appname"> <Parameter name="env" value="prod" override="false"/> </Context> <!-- 针对开发环境应用的配置 --> <Context docBase="webapps/appname-dev.war" path="/appname-dev"> <Parameter name="env" value="dev" override="false"/> </Context> </Context>
这里的override="false"可以防止WAR包内的配置覆盖全局参数。
内容的提问来源于stack exchange,提问作者Alvin
相关产品推荐
相关产品推荐

