【问题标题】:tomcat connection poolingtomcat 连接池
【发布时间】:2009-04-09 16:13:04
【问题描述】:

我有一个在 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 中点击“构建”,将战争放在 dist 目录中,并将其放入任一服务器的 tomcat 应用程序目录中,而不必在新战争结束后四处更改 xml 文件被部署。 servlet 知道在每个系统上从哪里获取属性文件,所以如果我可以将属性文件与连接池属性集成,我就可以准备就绪了。

有什么想法吗...?

【问题讨论】:

    标签: tomcat dynamic connection-pooling


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 这正是我想要的。谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 2012-03-02
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多