防止在Tomcat6中覆盖上下文XML



我正在使用JNDI从应用程序的context.xml中读取数据库配置。我目前的设置方式是在conf/Catalina/localhost中使用[appname].xml。然而,当我重新部署应用程序时,这个文件会被一个空的上下文文件覆盖,我必须将自定义的上下文文件复制回conf/Catalina/localhost目录。对于我的测试服务器和生产服务器,我有不同的数据库设置等,因此不想将META-INF中的上下文文件放在WAR文件中,但只想将其保存在conf/Catalina/localhost目录中。这可能吗?

是否有更好的地方来放置数据库配置?

我也希望避免将配置放在server.xml文件中,尽管我知道这是可能的。

谢谢!

我想研究一下使用maven概要文件(一个用于prod,一个用于test),并为每个概要文件提供不同的资源定义。您可以将常用文件保存在src/main/resources中,然后为每个配置文件类型设置一个文件夹,以将特定的配置文件保存在:中

  • src/test/resources
  • src/prod/resources

然后你可以修改你的pom来定义每个配置文件及其相关资源:

<project>
  <profiles>
    <profile>
      <id>prod</id>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.outputDirectory}</targetPath>
          </resource>
          <resource>
            <directory>src/prod/resources</directory>
            <targetPath>${project.build.outputDirectory}</targetPath>
          </resource>
        </resources>
      </build>
    </profile>
    <profile>
      <id>test</id>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.outputDirectory}</targetPath>
          </resource>
          <resource>
            <directory>src/test/resources</directory>
            <targetPath>${project.build.outputDirectory}</targetPath>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
</project>

最后,您可以使用-Pprod或-Ptest-profile参数来构建mvn-

mvn -Pprod package

问题是取消部署删除了安装在Catalina/localhost/.xml 中的特定于webapp的context.xml文件

如果你不想删除文件,你只需要重新部署它,而不是取消部署/部署

最新更新