在哪里可以设置超时以获取数据库连接: 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数据库。有一天,我们的Net Admin在此应用程序无法获得数据库连接后仍在防火墙中更改了某些内容,但仍然没有超时和错误。在防火墙应用程序中删除此更改(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>
答案 0 :(得分:0)
我相信这是你maxWait
时间,你当前设置为1000毫秒。如果您希望应用程序等待每个应用程序,则将其设置为-1,否则每次超过等待时间都会通过异常,这意味着连接尝试已超时。
答案 1 :(得分:0)
您可以使用完全限定的连接URL并指定CONNECT_TIMEOUT。 请注意,您可以在此连接URL中使用SCAN IP或服务名称。您不能使用SID。
jdbc:oracle:thin:@(DESCRIPTION= (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)
(ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-scan)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-scan)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
(2)OracleConnection.CONNECTION_PROPERTY_THIN_NET_CONNECT_TIMEOUT中有一个属性,也可用于设置此属性。有关更多详细信息,请参阅Javadoc。 http://docs.oracle.com/database/121/JAJDB/toc.htm