gpt4 book ai didi

java - 错误: System Resource Exceeded

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:20 25 4
gpt4 key购买 nike

控制台应用程序在以下位置执行:

1). Multiple threads
2). Connection Pooling (as the database connections range could be 5 to 30) of type Microsoft Access using DBCP.

在我执行此应用程序时(未测试数据库限制),它工作正常。每当我尝试在其他机器上引入相同的应用程序时,它都会生成错误。

我想知道为什么会发生这种情况,因为这里只有机器的差异。所以,它在我这边工作得很好。

我对连接池了解不多,但似乎我所理解的一切都已实现为:

public class TestDatabases implements Runnable{
public static Map<String, Connection> correctDatabases;

@Override
public void run() {
// validating the databases using DBCP
datasource.getConnection(); // Obtaining the java.sql.Connection from DataSource
// if validated successfully °º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸ putting them in correctDatabases
}
}

上述案例是使用ExecutorService实现的= 数据库数量。

最后,我尝试将它们放入静态类型集合中 Map<String, Connection>并在整个应用程序中使用它。换句话说:我正在尝试收集 connectionString以及 map 中的连接。

在我的应用程序的其他部分,我只是处理与连接 URL 一起出现的多个线程。因此,要执行任何数据库操作,我调用

Connection con = TestDatabases.correctDatases.get(connectUrl);

对于该机器,该应用程序对于大约 5 个数据库运行良好。当我尝试使用上面的 Connection (con) as stmt.executeQuery(query); 来触发查询时,总是会生成错误。

因为,我最终无法重现此问题,连接池似乎出现了问题,或者我没有配置我的应用程序来正确处理连接池。

仅供引用,我正在正确执行 Connection closefinally阻止我的应用程序终止,并且该应用程序也使用 Quartz Scheduler。对于连接池,从 TestDatabases 类调用以下内容进行设置:

public synchronized DataSource setUp() throws Exception {
Class.forName(RestConnectionValidator.prop.getProperty("driverClass")).newInstance();
log.debug("Class Loaded.");
connectionPool = new GenericObjectPool();
log.debug("Connection pool made.");
connectionPool.setMaxActive(100);
ConnectionFactory cf = new DriverManagerConnectionFactory(
RestConnectionValidator.prop.getProperty("connectionUrl")+new String(get().toString().trim()),
"","");
PoolableConnectionFactory pcf =
new PoolableConnectionFactory(cf, connectionPool,
null, null, false, true);
return new PoolingDataSource(connectionPool);
}

以下是我收到的错误(在另一台机器上)

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] System resource exceeded.

以下是数据库路径:

jdbc:odbc:DRIVER= {Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\\DataSources\\PR01.mdb

每个数据库似乎都不太重(总大小约为 5 到 15 MB)。

所以,我有以下解决方案:

1). Correction of Connection Pooling or migrate to the newer one's like c3p0 or DBPool or BoneCP.
2). Introducing batch concept - in which I will schedule my application for each group of 4 databases. It could be very expensive to deal with as any time the other schedule may also collapse.

我很确定这是 Java 相关的错误,但我不明白为什么。

最佳答案

刚刚迁移到 BoneCP,这解决了我的问题。我猜想由于多线程环境,dpcp 没有提供来自池的连接,而是试图一次又一次地 Access 数据库。也许我可以解决 dpcp 问题,但迁移到 BoneCP 也提供了性能优势。

关于java - 错误: System Resource Exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21677815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com