Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat-将数据库连接移出server.xml_Tomcat_Persistence_Datasource_Jndi_Tomcat8 - Fatal编程技术网

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

Tomcat-将数据库连接移出server.xml,tomcat,persistence,datasource,jndi,tomcat8,Tomcat,Persistence,Datasource,Jndi,Tomcat8,我使用的是Tomcat8,到目前为止,数据库连接资源是在conf/server.xml中配置的 现在我应该将db连接移出global server.xml。 将所有内容都放在应用程序META-INF/context.xml中是有问题的,因为应用程序将在不同的阶段使用不同的数据库运行,我们将无法为每个阶段提供特定的构建 你有什么想法、提示吗 保持现有的global server.xml和/MATA-INF/context.xml不变,在web应用程序的/web-INF/web.xml中添加以下JN

我使用的是Tomcat8,到目前为止,数据库连接资源是在conf/server.xml中配置的

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

你有什么想法、提示吗

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

然后在应用程序代码中,可以通过java:comp/env/jdbc/onejndi访问数据库连接池

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


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

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

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

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

旁注:

context.xml.default=>适用于所有应用程序 myapp.xml=>仅适用于名为myapp的应用程序
谢谢你的回答。但问题是,每个阶段的数据库连接都不同,如果属性放在META-INF/context.xml中,则需要新的包/构建。您是指数据库连接属性,如主机名、密码、用户名等?它们可以直接放在服务器的/conf/server.xml中,该服务器在WAR中没有打包。WAR中的META-INF/context.xml不包含任何数据库连接信息,只包含所有数据库都相同的JNDI名称environment@KenChan这正是JavaEE设计者所设想的部署:WAR文件包含对一些外部定义的JNDI资源的引用,在Tomcat的例子中,JNDI资源是由conf/server.xml中的服务器具体定义的。但是正如我提到的,我必须从tomcats server.xml中获取数据库配置——系统管理员希望他们的基准tomcats保持不变。
<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:/.../>
<ResourceLink name="jdbc/onejndi" global="jdbc/onejndi"
              type="javax.sql.DataSource"/>
<resource-ref>
    <res-ref-name>jdbc/onejndi</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>