spring - TomEE 数据源资源获取 "NoWait: Pool empty. Unable to fetch a connection, none available[5 in use]."

标签 spring tomcat datasource apache-tomee

我在 Eclipse Neon 中运行 TomEE 7.0.1。我在“tomee.xml”文件中定义了一个数据源资源。 DataSource 连接到 Oracle 数据库,我从本地 Maven 存储库获取驱动程序。

当 TomEE 启动时,我在控制台中收到以下错误:

org.apache.tomcat.jdbc.pool.PoolExhaustedException: [main] NoWait: Pool empty. Unable to fetch a connection, none available[5 in use].
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:679)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:468)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)
at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEConnectionPool.<init>(TomEEDataSourceCreator.java:221)

这是我的资源定义:

<Resource id="global/foo/bar" type="DataSource" classpath="mvn:oracle:ojdbc6:11.2.0.3">
    JdbcDriver = oracle.jdbc.driver.OracleDriver
    MaxActive = 5
    MinIdle = 2
    MaxIdle = 2 
    MaxWait = 10000
    JdbcUrl = jdbc:oracle:thin:@<host>:1521:sus2
    UserName = <userid>
    Password = <password>
</Resource>

我已经删除了主机、用户和密码,但 id 是写的。我仍然不确定 JNDI 查找,但这显然是一个单独的问题。

这是我在 Spring 上下文中的 JNDI 查找引用:

    <jee:jndi-lookup jndi-name="java:global/foo/bar" id="sus2ds"/>

下面是更多 Tomcat 控制台输出:

    INFO: Configuring Service(id=global/foo/bar, type=Resource, provider-id=Default JDBC Database)
...
INFO: Creating Resource(id=global/foo/bar)
Aug 03, 2016 11:08:27 AM org.apache.tomcat.jdbc.pool.ConnectionPool checkPoolConfiguration
WARNING: initialSize is larger than maxActive, setting initialSize to: 5
Aug 03, 2016 11:08:27 AM org.apache.tomcat.jdbc.pool.ConnectionPool init
SEVERE: Unable to create initial connections of pool.
org.apache.tomcat.jdbc.pool.PoolExhaustedException: [main] NoWait: Pool empty. Unable to fetch a connection, none available[5 in use].
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:679)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:468)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)
    at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEConnectionPool.<init>(TomEEDataSourceCreator.java:221)
...

Aug 03, 2016 11:08:27 AM org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource <init>
SEVERE: Can't create DataSource
org.apache.tomcat.jdbc.pool.PoolExhaustedException: [main] NoWait: Pool empty. Unable to fetch a connection, none available[5 in use].
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:679)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:468)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)
    at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEConnectionPool.<init>(TomEEDataSourceCreator.java:221)
...

...
2016-08-03 11:08:30,080 WARN  [localhost-startStop-1] support.AbstractApplicationContext (AbstractApplicationContext.java:549) - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sus2ds': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name "foo/bar" not found.
2016-08-03 11:08:30,084 ERROR [localhost-startStop-1] context.ContextLoader (ContextLoader.java:351) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sus2ds': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name "foo/bar" not found.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
...
Caused by: javax.naming.NameNotFoundException: Name "foo/bar" not found.
    at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:199)
    at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:151)
    at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:291)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:828)
...
Aug 03, 2016 11:08:30 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sus2ds': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name "foo/bar" not found.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
...
Caused by: javax.naming.NameNotFoundException: Name "foo/bar" not found.
    at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:199)
    at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:151)
    at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:291)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:828)
...

最佳答案

我会启动服务器并使用 MBean 资源管理器或 JNDI 资源管理器 Web 应用程序来查看 JNDI 树并获得正确的名称。我怀疑您不需要 id="global/foo/bar" 但需要 id="foo/bar" 并在您的 Spring 代码中保持查找相同。

关于spring - TomEE 数据源资源获取 "NoWait: Pool empty. Unable to fetch a connection, none available[5 in use].",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751143/

相关文章:

java - 在 tomcat 中安装 GoDaddy SSL 证书...没有证书与私钥匹配

mysql - 在连接字符串中排除敏感数据的优点和缺点?

grails - 如何在 Grails 3.x 中配置 JNDI 数据源?

javascript - 使用一个数据源 Kendo 的多个下拉列表

java - 如何在 Spring Boot 中实现循环队列消费者

java - Auto Scaling 无法在 Elastic Beanstalk 中与 Tomcat 一起正常工作

java - java.lang.ClassNotFoundException 的未知原因

tomcat - 在 EC2 Tomcat 服务器上安装 SSL

java - Spring Data JPA 更新方法

java - Spring Boot CSRF 在负载均衡器处理时失败