20分钟后连接到oracle数据库失败

时间:2015-08-11 05:43:43

标签: java oracle database-connection connection-timeout

我有一个连接到Oracle数据库的Java应用程序,但我的应用程序在20分钟后失去了连接。关闭和记录后它将起作用:

我的poolingDatasourceExample.java如下:

Properties props = new Properties();
props.put("user", uname);
props.put("password", pass);
props.put("password", pass);
props.put("testWhileIdle", "true");
props.put("testOnBorrow", "true");
props.put("testOnReturn", "false");
props.put("validationQuery", "SELECT 1");
props.put("validationInterval", "30000");
props.put("timeBetweenEvictionRunsMillis", "5000");
props.put("maxActive", "100");
props.put("minIdle", "10");
props.put("maxWait", "10000");
props.put("initialSize", "10");
props.put("removeAbandonedTimeout", "60");
props.put("removeAbandoned", "true");
props.put("logAbandoned", "true");
props.put("minEvictableIdleTimeMillis", "30000");
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI, props);

1 个答案:

答案 0 :(得分:0)

您是否存储java.sql.Connection对象,并在20分钟后看到它停止工作?这是很正常的,特别是如果它在两者之间不活跃(例如,参见this post)。非活动连接将由数据库关闭,很可能由网络关闭,以防止占用所有资源的僵尸进程。他们在错误恢复方面也很糟糕 - 一旦Connection中断,您需要重新创建它。它们不是为共享而设计的,尽管它们是technically thread-safe

您应该保留工厂并在需要时请求新的Connection,而不是保留Connection。更好的是,use a connection pool - 这些通常会测试断开连接的连接,并在需要时重新创建它们。它们还允许您的应用程序有效地共享连接。大多数应用服务器都提供连接池,但如果您的部署不允许,则可以创建自己的连接池。