【发布时间】:2015-07-17 09:17:29
【问题描述】:
在哪里可以设置获取数据库连接的超时时间: javax.sql.DataSource.getConnection() 在 tomcat 7 应用服务器中?
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup(DBManagerConstants.CONTEXT_NAME);
DataSource ds = (DataSource) envContext.lookup(DBManagerConstants.DS_NAME);
conn = ds.getConnection();
我在 Tomcat 7 上有 Java Web 应用程序,它连接到 Oracle 数据库。有一天,我们的网络管理员在此应用程序无法获得数据库连接后更改了防火墙中的某些内容,但仍然没有超时和错误。在防火墙应用程序中删除此更改后(1,5 小时后)继续工作,就好像什么都没发生一样。这些延迟的连接成功地完成了所有操作。
这是我的数据源
<Context>
<Resource
name="jdbc/pds"
auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="our.encryptor.EncryptedDataSourceFactory"
logAbandoned="true"
maxActive="30"
maxIdle="10"
maxWait="1000"
password="my_password"
removeAbandoned="true"
removeAbandonedTimeout="60"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@127.0.0.1:8080:SID"
username="my_user"
accessToUnderlyingConnectionAllowed="true"
validationQuery="select 1 from dual" />
</Context>
【问题讨论】:
-
我认为问题在于 url 字符串
url="jdbc:oracle:thin:@127.0.0.1:8080:SID"8080 是 Tomcat 默认端口。检查用于直接连接数据库的 tnsentry。 -
void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException from java.sql.Connection 可能有用
标签: java oracle tomcat jdbc connection