Tomcat - 将数据库连接移出server.xml

时间:2018-06-08 08:24:03

标签: tomcat persistence datasource jndi tomcat8

我在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

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

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

有一个想法,一个提示,......?

2 个答案:

答案 0 :(得分:1)

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

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

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

旁注:

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

答案 1 :(得分:0)

保持现有的全局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访问数据库连接池。

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

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