You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat中Java Web应用DB2连接池poolName的正确取值

Tomcat部署Java应用:DB2连接池配置匹配问题

我正尝试在Tomcat部署的Java应用中配置DB2数据库连接池,当前web.xml、context.xml及Java代码这三部分配置存在不匹配问题,请问source.java中的poolName变量应设置为哪个正确值?

现有配置

web.xml

<resource-ref>
    <description>Connection pool to SFEAAPPDB database</description>
    <res-ref-name>jdbc/SFEAAPPDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

context.xml

<Resource name="jdbc/SFEAAPPDB"
    auth="Container"
    type="javax.sql.ConnectionPoolDataSource"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    driverClassName="com.ibm.db2.jcc.DB2Driver"
    url="jdbc:db2://someplacesomewhere.es:50001/DESA"
    username="admin"
    password="admin"
    />

source.java

String poolName = "jdbc/SFEAAPPDB";
DataSource ds = new InitialContext().lookup(poolName);

正确配置及poolName值

1. 修正context.xml的类型不匹配问题

你的context.xml中Resource的type设置为javax.sql.ConnectionPoolDataSource,但web.xml中声明的res-type是javax.sql.DataSource,两者类型不匹配。Tomcat的org.apache.tomcat.jdbc.pool.DataSourceFactory返回的是标准javax.sql.DataSource实现,所以需要修改context.xml的type:

<Resource name="jdbc/SFEAAPPDB"
    auth="Container"
    type="javax.sql.DataSource" <!-- 修正此处 -->
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    driverClassName="com.ibm.db2.jcc.DB2Driver"
    url="jdbc:db2://someplacesomewhere.es:50001/DESA"
    username="admin"
    password="admin"
    />

2. 正确的poolName值

在Java代码中通过JNDI查找Web应用内的资源时,必须使用**java:comp/env/前缀**加上web.xml中声明的res-ref-name,所以poolName应设置为:

String poolName = "java:comp/env/jdbc/SFEAAPPDB";
DataSource ds = new InitialContext().lookup(poolName);

如果你的Resource配置在Tomcat全局context.xml而非Web应用的META-INF/context.xml中,还需要在web.xml的resource-ref中添加<res-link>标签关联全局资源,但通常Web应用内的资源直接使用上述前缀即可正常查找。


内容的提问来源于stack exchange,提问作者JLLMNCHR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:29:53