我正在处理连接到DB(Java)的Azure函数,我想这很常见。
该功能可能是冷启动或热启动,大多数情况下我的应该保持温暖(每5分钟调用一次)。该连接存储在一个静态变量的池(JDBCPooledConnectionSource)中,因此从理论上讲,每次热启动都应重新使用该连接,以提高效率。
这是一个好的策略还是会引起问题?例如,光纤连接断开,但其引用仍在堆中:当使用该引用进行查询时,可能会发生异常。
为避免调用断开的连接,我可以使用一个非静态变量来存储连接。这应该更安全,但效率较低,因为应该在每次通话时重新创建连接。
哪种策略最好?我想有很多功能可以做到这一点(连接到数据库),所以可以肯定的是,比我更有经验的人知道最佳策略或常见错误。
答案 0 :(得分:0)
我之所以写答案,是因为发现有关我如何使用connectionSource()的错误。我执行查询时没有释放连接:
ConnectionSource cs = getConnectionSource();
DatabaseConnection dbc = cs.getReadOnlyConnection("my_table");
dbc.executeStatement("Select count(*) from my_table;", JdbcDatabaseConnection.DEFAULT_RESULT_FLAGS);
,并且连接从未被释放,因此它也没有被删除/重用。现在,我添加了以下内容,它可以按预期工作:
cs.releaseConnection(dbc);