Java “如何修复”;在配置的阻塞超时(60000[ms])内没有可用的托管连接;
我已经在Java “如何修复”;在配置的阻塞超时(60000[ms])内没有可用的托管连接;,java,ojdbc,wildfly-15,Java,Ojdbc,Wildfly 15,我已经在wildfly-15.0.1.FINAl服务器上部署了java应用程序。我正在使用OJDBC 12.1.0.2.0驱动程序 <datasource jndi-name="java:/DS_APP" pool-name="APP" enabled="true" use-java-context="true"> <connection-url>jdbc:oracle:thin:@localhost:1521:MYDB</connection-ur
wildfly-15.0.1.FINAl
服务器上部署了java
应用程序。我正在使用OJDBC 12.1.0.2.0
驱动程序
<datasource jndi-name="java:/DS_APP" pool-name="APP" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@localhost:1521:MYDB</connection-url>
<driver>OracleJDBCDriver</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>3</min-pool-size>
<max-pool-size>200</max-pool-size>
</pool>
<security>
<security-domain>Password4APP</security-domain>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>60000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
</timeout>
<statement>
<track-statements>true</track-statements>
<prepared-statement-cache-size>100</prepared-statement-cache-size>
</statement>
</datasource>
我读了很多关于这个错误的博客,但我的观点不同。
从博客中我发现了一些问题:
- 我所做的:我检查了代码的每一行,我确信每一行
和连接
正在关闭可调用语句
- 我所做的:当出现此问题时,我检查了数据库端的连接,但没有活动连接,所有连接都处于非活动状态,而且池中有200个连接,数量如此之多,我最多同时有30个活动会话,我有60秒的时间等待,直到池中的连接空闲李>
当我重新启动我的
Wildfly
服务器时,问题解决了,但我感兴趣的是为什么会发生这种错误,将来是否会发生这种错误(我认为它们还会再次发生)以及如何避免它们?我最近遇到了同样的问题。
正如您所提到的,此修复的可能解决方案是
Caused by: java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/DS_APP
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:146) ~[?:?]
at org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:64) ~[?:?]
at ge.app.ws.util.DbManager.getDatabaseConnection(DbManager.java:55) ~[classes:?]
... 2 more
Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/DS_APP
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:690) ~[?:?]
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:440) ~[?:?]
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789) ~[?:?]
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138) ~[?:?]
at org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:64) ~[?:?]
at ge.app.ws.util.DbManager.getDatabaseConnection(DbManager.java:55) ~[classes:?]
... 2 more
Caused by: javax.resource.ResourceException: IJ000655: No managed connections available within configured blocking timeout (60000 [ms])
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:570) ~[?:?]
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:632) ~[?:?]
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:604) ~[?:?]
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624) ~[?:?]
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:440) ~[?:?]
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789) ~[?:?]
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138) ~[?:?]
at org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:64) ~[?:?]
at ge.app.ws.util.DbManager.getDatabaseConnection(DbManager.java:55) ~[classes:?]
... 2 more
try {
Connection dbConnect = dataSource.getConnection();
Statement stmt = dbConnect.createStatement();
ResultSet rs = stmt.executeQuery("select s from soething");
stmt.close();
dbConnect.close();
return something;
} catch (SQLException e) {
LOGGER.log(Level.INFO, e.getMessage());
return e.getMessage();
}
Statement stmt=null;
Connection dbConnect=null;
try {
dbConnect = dataSource.getConnection();
stmt = dbConnect.createStatement();
ResultSet rs = stmt.executeQuery("select s from soething");
return something;
} catch (SQLException e) {
LOGGER.log(Level.INFO, e.getMessage());
return e.getMessage();
}finally{
if (stmt != null) stmt.close();
if (dbConnect != null) dbConnect.close();
}