【问题标题】:Tomcat - Move database connection out of server.xmlTomcat - 将数据库连接移出 server.xml
【发布时间】:2018-06-08 08:24:03
【问题描述】:

我在tomcat 8上,目前数据库连接(资源)配置在conf/server.xml

<Resource name="jdbc/onejndi"
          auth="Container"
          type="javax.sql.DataSource"
          maxTotal="8"
          maxIdle="30"
          maxWaitMillis="10000"
          username="sa"
          password=""
          driverClassName="org.hsqldb.jdbcDriver"
          url="jdbc:hsqldb:file:c:/.../>

在应用程序META-INF/context.xml我们有相应的资源链接

<ResourceLink name="jdbc/onejndi" global="jdbc/onejndi"
              type="javax.sql.DataSource"/>

现在我应该将 db 连接移出全局 server.xml。 将所有内容都放入应用程序META-INF/context.xml 是有问题的,因为应用程序将在不同的阶段使用不同的数据库运行,我们将无法为每个阶段提供特定的构建。

有想法、提示、...?

【问题讨论】:

    标签: tomcat persistence datasource jndi tomcat8


    【解决方案1】:

    现在我自己找到了解决方案。

    我在tomcat/conf/catalina/localhost 中放置了一个文件context.xml.default。 结构类似于标准 context.xml 文件,可能包含 server.xml 中的资源标签。

    现在我不需要更改基线 tomcat 的文件,也不需要在应用程序 META-INF/context.xml 中写入数据库连接。

    旁注:

    • context.xml.default => 适用于所有应用程序
    • myapp.xml => 仅适用于名为“myapp”的应用

    【讨论】:

      【解决方案2】:

      保持现有的全局server.xml/MATA-INF/context.xml 不变,在Web 应用程序的/WEB-INF/web.xml 中添加以下JNDI:

      <resource-ref>
          <res-ref-name>jdbc/onejndi</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>
      

      然后在你的应用代码中,你可以通过java:comp/env/jdbc/onejndi访问DB连接池。

      这没有问题,因为 MATA-INF/context.xml/WEB-INF/web.xml 中的 JNDI 名称 jdbc/onejndi 对于所有环境都是相同的。每个环境中不同的数据库连接属性(主机名、用户名、密码等)可以是在$CATALINA_BASE/conf/server.xml 中配置,未打包在 WAR 中。

      这意味着您可以构建一次 WAR 并部署到不同的环境。

      【讨论】:

      • 感谢您的回答。但问题是,每个阶段的数据库连接都不同,如果属性放在META-INF/context.xml 中,则需要新的包/构建。
      • 您的意思是数据库连接属性,例如主机名、密码、用户名等?它们可以直接放在服务器的/conf/server.xml 中,该/conf/server.xml 未打包在WAR 中。 WAR 中的META-INF/context.xml 不包含任何数据库连接信息,仅包含所有环境都相同的 JNDI 名称
      • @KenChan 这正是 Java EE 设计者所设想的部署:WAR 文件包含对一些外部定义的 JNDI 资源的引用,而 JNDI 资源由服务器具体定义(在 conf/server.xml以 Tomcat 为例)。
      • 是的,你是对的。但正如我提到的,我必须从 tomcats server.xml 中获取 db-configuration - 系统管理员希望他们的“基线 tomcats”保持不变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2010-09-06
      • 2010-09-06
      • 2015-06-23
      • 1970-01-01
      • 2021-03-17
      • 2019-06-09
      相关资源
      最近更新 更多