Java Tomcat DBCP正在耗尽连接

Java Tomcat DBCP正在耗尽连接,java,spring,oracle,tomcat,tomcat-dbcp,Java,Spring,Oracle,Tomcat,Tomcat Dbcp,我在尝试使用Oracle将Tomcat的JDBC池集成到我的web应用程序时遇到了一个ORA-12519,TNS:未找到合适的服务处理程序错误 在对应用程序运行集成测试几分钟后,我通常会看到此错误间歇性出现 我的配置是: tomcat/lib目录中的oracle驱动程序和tomcat dbcp JAR 两个webapp,都使用相同的资源。春季完成的配置: <jee:jndi-lookup id="webDS" jndi-name="jdbc/web" expected-type=

我在尝试使用Oracle将Tomcat的JDBC池集成到我的web应用程序时遇到了一个
ORA-12519,TNS:未找到合适的服务处理程序
错误

在对应用程序运行集成测试几分钟后,我通常会看到此错误间歇性出现

我的配置是:

  • tomcat/lib目录中的oracle驱动程序和tomcat dbcp JAR
  • 两个webapp,都使用相同的资源。春季完成的配置:

    <jee:jndi-lookup id="webDS" jndi-name="jdbc/web"
        expected-type="javax.sql.DataSource" />
    
    您的验证查询(
    选择1
    )在Oracle中不起作用。它必须是
    从双
    中选择1


    似乎当使用错误的验证查询时,应用程序无法识别正常连接并将所有连接标记为无效。

    这是一个数据库错误,而不是tomcat/jdbc。你能在数据库服务器“lsnrctl服务”上运行吗。。那么。没问题,没有问题。请尝试“alter system set processs=300(或您想要的)scope=spfile;”重新启动数据库。您的验证查询(
    SELECT 1
    )在oracle中不起作用。它必须是
    从dual
    中选择1。这不是数据库错误。相同的精确配置,但使用c3p0效果很好。@EvgeniDimitrov的评论就是解决方案。我不再失去联系;问题在于,使用错误的测试查询,系统无法判断连接是否过时。叶甫盖尼,如果你把这个作为答案贴出来,我会接受的。@MarkS刚贴出来。我很高兴这有帮助。
    <Resource name="jdbc/web" auth="Container" 
    type="javax.sql.DataSource" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
    testWhileIdle="true" 
    testOnBorrow="true" 
    testOnReturn="false" 
    validationQuery="SELECT 1" 
    timeBetweenEvictionRunsMillis="30000" 
    maxActive="20" 
    maxIdle="10" 
    minIdle="5" 
    removeAbandonedTimeout="60" 
    removeAbandoned="false" 
    logAbandoned="true" 
    minEvictableIdleTimeMillis="30000" 
    jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
    username="${database.user}" 
    password="${database.password}" 
    driverClassName="${database.driver}" 
    url="${database.url}" />
    
    Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:221)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:157)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:56)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:159)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:183)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:157)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1881)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1858)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838)
    at org.hibernate.loader.Loader.doQuery(Loader.java:906)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:348)
    at org.hibernate.loader.Loader.doList(Loader.java:2550)
    at org.hibernate.loader.Loader.doList(Loader.java:2536)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2366)
    at org.hibernate.loader.Loader.list(Loader.java:2361)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:198)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1230)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:268)
    ... 112 more
    Caused by: java.sql.SQLException: Listener refused the connection with the following error:
    ORA-12519, TNS:no appropriate service handler found
    
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
    at org.apache.tomcat.jdbc.pool.PooledConnection.reconnect(PooledConnection.java:315)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:803)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:628)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:187)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128)
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:301)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:214)
    ... 132 more
    Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
    ORA-12519, TNS:no appropriate service handler found
    
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:399)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
    ... 146 more