应用程序空闲时获取连接超时错误

时间:2016-08-19 07:15:40

标签: java datasource

当我将应用程序闲置10或15小时时,我将收到连接超时错误。但是当我经常使用我的应用程序时,我无法随时看到此错误。任何人都可以指导我是否在下面的代码中做了一些错误。此应用程序仅供两个用户使用,而且也不常使用。

<Context path="/****" reloadable="true">
       <Resource
            name="XXXX"
            type="javax.sql.DataSource"
            username="XXXX"
            password="XXXX"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            maxIdle="4"
            maxWait="30000"
            initialSize="2"
            url="jdbc:sqlserver://localhost;database=XXXX"
            maxActive="20"/>


</Context>

3 个答案:

答案 0 :(得分:0)

不幸的是,您的示例中没有提供太多信息。假设这是Spring(Spring Framework)上下文配置的一小部分,我宁愿为数据库配置连接池。如果当前请求的池中没有可用的连接,则此池可以为每个请求保留一定量的空闲连接,并且可以打开新的连接。我在MySql文档中找到了这段XML。

<bean id="dataSource" destroy-method="close"
  class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${db.driver}"/>
    <property name="url" value="${db.jdbcurl}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
    <property name="initialSize" value="3"/> 
</bean>

请注意,数据源的类型为org.apache.commons.dbcp.BasicDataSource。有关详细信息,请参阅MySqlSpring FrameworkDBCP

的文档

答案 1 :(得分:0)

根据提供的相关信息,我可以看到:

  1. 很可能,应用程序没有正确处理connection,即它正在创建连接,但在某种程度上无法在应用程序代码中正确关闭连接。

    根据问题,如果只有2个用户正在使用此应用程序,那么可能您可能无法捕获通常在连接池达到最大限制时引发的连接耗尽错误。

  2. 但是,如果您增加应用用户,您会很快看到您的连接达到最大限制。

    检查应用程序启动后创建的连接数并观察行为。检查非活动连接是否关闭。

    1. 另外,我在配置中看不到inactive connection timeout property。你能检查一下你是否有这个房产。

答案 2 :(得分:0)

这是数据库的一个问题,它会在很长的空闲时间后关闭/锁定。在MySQL中默认为8小时。您必须使用连接池库,如C3P0,它具有与数据库通信的配置,并在关闭时打开连接。

可以增加数据库中的超时量,但不建议这样做。因此,我需要一个像上面提到的系统,它可以为你打开连接。