数据库连接超时Tomcat7

时间:2015-07-17 09:17:30

标签: java oracle tomcat jdbc connection

在哪里可以设置超时以获取数据库连接: 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>

2 个答案:

答案 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