我在Scala应用程序中为Oracle数据库实现的Oracle通用连接池(UCP)出现问题。
在与数据库建立连接的情况下,它可以完美运行,但是当网络在有限的时间内出现问题(应用程序或数据库脱机)时,它显然无法创建连接虽然问题仍然存在,但是当应用程序可以再次ping数据库时,它就无法创建新问题。重新使应用程序正常工作的唯一方法是重新启动它。
我已经建立了一个用于管理连接的类,并使用以下方法创建池数据源:
private def createConnectionPool(
connectionString: String,
username: String,
password: String
): PoolDataSource =
{
val p = PoolDataSourceFactory.getPoolDataSource()
p.setConnectionPoolName("main_ucp_pool")
p.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource")
p.setURL(connectionString)
p.setUser(username)
p.setPassword(password)
p.setInitialPoolSize(5)
p.setMinPoolSize(3)
p.setMaxPoolSize(20)
p
}
private lazy val pds = createConnectionPool('url', 'username', 'pass')
然后,每次需要数据库连接时,我都会通过以下方法调用来获取它:
pds.getConnection()
我是否丢失了代码中的某些内容?或者,即使在发生网络问题之后,调用getConnection
方法时,池数据源是否也应重试建立与数据库的连接,这是真的吗?
换句话说,如果它在网络中断时未能创建连接,则第二次,如果应用程序现在可以ping数据库,那么必须建立连接吗?