tomcat连接池

标签 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 中点击“构建”,在 dist 目录中获取 war,并将其放入任一服务器的 tomcat 应用程序目录中,而不必在新 war 完成后四处更改 xml 文件已部署。 servlet 知道从哪里获取每个系统上的属性文件,因此如果我可以将属性文件与连接池属性集成,我就万事大吉了。

任何想法...?

最佳答案

我把我所有的数据源定义放在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"/>

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>

关于tomcat连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734902/

相关文章:

python - 动态创建类 - Python

Apache ODE 实例 ID

java - JDBC 连接 : Not Recconecting after Timeout

jquery - 在页面刷新时加载不同的图像

docker - 如何使用docker-compose动态分配端口?

spring - 我可以为数据库实例使用多个 C3P0 数据源吗?

java - MySql Connector J JDBC 驱动程序不支持连接池吗?

cloud - 云原生环境中的连接池

java - Tomcat 访问日志只显示 HTTP Post 方法

java - 我的 tomcat 正在运行,但我无法连接到 http ://localhost:8080