tomcat连接池

时间:2009-04-09 16:13:05

标签: tomcat dynamic connection-pooling

我有一个在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,身份验证等,我使用,一个用于测试服务器,一个用于生产服务器,并且效果很好,但现在如果我想使用连接池,我该怎么办?将它集成到我的servlet中?

我希望能够在Netbeans 6.5中点击“build”,在dist目录中进行战争,并将其放入任一服务器的tomcat应用程序目录中,而不必在新战争结束后更改xml文件已部署。 servlet知道在每个系统上获取属性文件的位置,所以如果我可以将属性文件与连接池属性集成,我就会全部设置。

任何想法......?

2 个答案:

答案 0 :(得分:4)

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

server.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>

context.xml中:

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

的web.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>

答案 1 :(得分:-1)

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