spring Hibernate会话超时

时间:2014-07-04 08:27:03

标签: spring hibernate spring-mvc spring-jdbc hibernate-tools

我使用Spring Hibernate模板apache tomcat和MySQL。一切都在开发中很有效,但是当我将应用程序部署到测试服务器并让它在一夜之间运行(大部分空闲)时,我通常会在早上对此表示欢迎:

以下是我的spring servlet.xml:

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
      <property name="maxUploadSize" value="1000000"/>
</bean>


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
    p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" />

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${jdbc.dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

如何配置spring servlet.xml以避免此问题?感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用hibernate属性设置会话池,也可以配置超时。

<property name="hibernate.c3p0.timeout">300</property>

希望这会对你有所帮助。

答案 1 :(得分:0)

您需要检查SQL日志。会话已超时,因为某些查询的时间比默认的事务超时时间长。

赋予它更大的价值无法解决您的问题。因此,您需要配置jdbcdslog之类的工具来拦截所有查询并记录慢速查询。

通过这种方式,您可以确定需要花费多长时间。它可能是一个低效的查询或许多小的查询(N + 1选择),而不是通过连接更好地优化。

通过这种方式,您还可以确定哪些查询需要更多索引。

或者,您可以计划设置二级查询缓存,以加快一些很少更改的sloq查询。

答案 2 :(得分:0)

嗨@jans据说我们不应该使用hibernate内置连接池生产。您可以使用C3p0进行连接池以避免错误。 同样来自我学到的东西,请确保您关闭所有使用过的课程。 您可以在“hibernateProperties”属性中添加以下代码。

<prop key= "hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>      
<prop key="hibernate.c3p0.acquire_increment">5</prop>
<prop key="hibernate.c3p0.idle_test_period">300</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>