【问题标题】:Configure Tomcat to use properties file to load DB connection information配置Tomcat使用属性文件加载DB连接信息
【发布时间】:2010-11-25 17:34:12
【问题描述】:

创建从属性文件读取配置参数的 Tomcat 部署的公认做法是什么?

如果能够提供 WAR 文件并指定客户端只需要在特定目录中创建或编辑属性文件,那就太好了。这是一种有些常规的做事方式吗?还有比这更好的方法吗?

【问题讨论】:

    标签: java deployment tomcat properties


    【解决方案1】:

    我们经常通过提供一个 WAR 和一个 Context XML 文件来分发 webapps,该文件被放置到您的 tomcat/conf/Catalina/localhost 目录中,并且可以从任何路径加载 webapp。有一个参考文档here。这提供了以下优势:

    • 上下文参数可以在这里配置,webapp可以读取
    • 可以在此处定义和配置数据源
    • WAR 实际上可以存在于文件系统的任何位置,这意味着如果 Tomcat 升级,只需将这个单一的配置文件移动到新的 Tomcat 安装,Web 应用程序和任何其他文件都可以保留在原处李>

    如果你真的想要一个属性文件,你可以在上下文XML文件中设置一个参数指向你的属性文件,读取ServletContextListener中的参数,然后读入属性文件。

    【讨论】:

      【解决方案2】:

      我们的处理方式:

      1. 让客户端使用我们同意的资源名称在GlobalNamingResources 中创建一个连接池。数据库驱动程序需要位于 Tomcat 的类路径中。
      2. 我们的 war 文件包含一个 META-INF/context.xml 文件,其中有一个 ResourceLink 链接到在步骤 1 中配置的连接池。

      这比简单地直接更改 context.xml 连接信息需要更多的前期工作,但随着时间的推移,它应该会得到回报。将设置开发服务器,其 GlobalNamingResources 指向开发,测试服务器指向测试等。然后,无需编辑任何内容即可将相同的 WAR 文件复制到每个服务器。

      这不是使用属性文件,但我认为它实现了相同的目标。允许用户/客户设置数据库连接信息。

      GlobalNamingResource 示例:

      <Resource name="jdbc/dbconnection" auth="Container"
      type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
      url="jdbc:oracle:thin:@127.0.0.1:1546:SID"
      username="scott" password="tiger" maxActive="8" maxIdle="4"
      validationQuery="select 1 from dual"
      testOnBorrow="true"/>
      

      war 文件中的 context.xml 示例:

      <Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true">
          <ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection" 
                type="javax.sql.DataSource"/>
      </Context>
      

      【讨论】:

        【解决方案3】:

        将配置存储在战区之外是一种很好的做法。在我们的 WAR 中,我们有一个默认位置来查找属性文件。如果默认值不起作用,您可以通过 JVM 参数或在 conf/Catalina/[host] 目录的上下文片段中定义的上下文参数指定位置。例如,

        <Context docBase="/server/app.war"
            swallowOutput="true" unpackWAR="false" useNaming="false">
        
            <Parameter name="config-file" value="/config/db.properties" override="true" />
        </Context>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-08
          • 2015-11-22
          • 1970-01-01
          • 2017-09-02
          • 2012-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多