1

我有一个在 Tomcat 中运行的简单 servlet。因为 servlet 连接到数据库,所以我需要使用连接池。但是,互联网上的所有示例都假定(开发人员)永远不会更改 servlet 连接到的数据库。

例如,这里是一个示例 context.xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/feeds">
    <Resource name="jdbc/TestDB"
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
        username="username"
        password="password"
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://example.com:1234/myDB"
        maxWait="1000"
        removeAbandoned="true"
        maxActive="30"
        maxIdle="10"
        removeAbandonedTimeout="60"
        logAbandoned="true"/>
</Context>

就我而言,我有一个测试服务器(postgresql)和一个生产服务器(ms sql),所以所有假设我可以在 context.xml 中硬编码设置的教程都行不通。

我有 2 个用于数据库 url、身份验证等的不同属性文件,一个用于测试服务器,一个用于生产服务器,效果很好,但是现在如果我想使用连接池,我将如何将其集成到我的小服务程序?

我希望能够在 Netbeans 6.5 中点击“构建”,将战争放在 dist 目录中,并将其放入任一服务器的 tomcat 应用程序目录中,而不必在新战争部署后四处更改 xml 文件。servlet 知道在每个系统上从何处获取属性文件,因此如果我可以将属性文件与连接池属性集成在一起,我就准备好了。

有任何想法吗... ?

4

2 回答 2

4

我把我所有的数据源定义都放在了tomcat的conf/server.xml文件中,所以war完全独立于数据源。

服务器.xml:

<GlobalNamingResources>
    <Resource name="mail/Mail" auth="Container" type="javax.mail.Session"
              mail.smtp.host="localhost"/>
    <Resource auth="Container" type="javax.sql.DataSource" name="jdbc/lagalerie"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://localhost/lagalerie?charSet=LATIN1"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="casashop" password="casashop"/>
</GlobalNamingResources>

上下文.xml:

  <ResourceLink global="jdbc/lagalerie" name="jdbc/lagalerie" type="javax.sql.DataSource"/>
  <ResourceLink global="mail/Mail" name="mail/Mail" type="javax.mail.Session"/>

网页.xml:

<resource-ref>
    <description>The datasource</description>
    <res-ref-name>jdbc/DataSource</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
    <description>The mail session</description>
    <res-ref-name>mail/Mail</res-ref-name>
    <res-type>javax.mail.Session</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
于 2009-04-09T17:32:53.387 回答
-1

您可以有 2 个不同的连接,并动态检测要在应用程序中使用的连接。

于 2009-04-09T16:26:40.893 回答