getConnection()上的java.util.NoSuchElementException

getConnection()上的java.util.NoSuchElementException,java,tomcat,jdbc,connection-pooling,Java,Tomcat,Jdbc,Connection Pooling,我有以下代码: Context ctx = new InitialContext(); // Set the initial context DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + serverURL); conn = dataSource.getConnection(); 但是,行conn=dataSource.getConnection()正在抛出一个java.util.NoSuc

我有以下代码:

Context ctx = new InitialContext(); // Set the initial context
DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + serverURL);        
conn = dataSource.getConnection();
但是,行
conn=dataSource.getConnection()
正在抛出一个
java.util.NoSuchElementException
。我对此有点困惑。这是否意味着我的服务器URL不正确?以下是my context.xml:

<Context>
    <Resource name=serverURL auth="Container" type="javax.sql.DataSource"
        driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://"
        username="" password="" maxActive="100" maxIdle="30" maxWait="10000" />

</Context> 

这是我的web.xml:

<resource-ref>

        <res-ref-name>serverURL</res-ref-name>

        <res-type>javax.sql.DataSource</res-type>

        <res-auth>Application</res-auth>

        <res-sharing-scope>Shareable</res-sharing-scope>

    </resource-ref>

服务器URL
javax.sql.DataSource
应用
可分享

有人知道出了什么问题吗?

java.util.NoSuchElementException
在连接池的连接用完时由连接池抛出。很可能是你的连接泄漏了。您可以尝试启用放弃的连接日志记录,以找出泄漏的位置

更新:

如果您在第一个连接中看到这一点,那么它很可能就是URL。一些谷歌搜索表明连接URL的格式是
jdbc:db2://[:]/
。您的URL缺少主机名和数据库名。如果端口不是标准端口,那么您也需要指定端口。

试试看-

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup(serverURL);
Connection conn = ds.getConnection();
// ...

另请参见

如果这是原因,则OP在使用连接后似乎没有关闭连接。这是我在程序中打开的第一个连接。@JohnRoberts那么问题似乎是您的数据源配置有问题,或者您没有发送正确的资源JDNI名称。serverURL不是主机吗?我的格式是“jdbc/xxxxxxxx”。一个
数据源
不应该抛出一个
NoSuchElementException
如果池耗尽,它应该阻塞直到连接可用,或者抛出一个
SQLException
。换句话说,这是池实现中的一个bug。结果与此相同。