"连接已关闭"在从暂停返回后的Spring应用程序中

时间:2014-04-16 05:59:49

标签: java xml spring spring-mvc jdbc

我使用spring security,它在一些bean xml配置中使用jdbcTemplate。当我让我的开发笔记本电脑进入睡眠模式并稍后再次开始工作时,我得到了#34;此连接已关闭"在尝试恢复测试应用时。

我知道如何恢复的唯一方法是繁琐地重新启动本地服务器,该服务器通过互联网连接到DB(postgreSQL)。

是否有某种方法可以让应用程序在从挂起(或长时间缺席?)返回后重新建立jdbc连接,而不是反复显示连接错误而从不重新建立连接?

我的security-context.xml如下所示:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.2.xsd">
    <http use-expressions="true">
        <intercept-url pattern="/login*" access="isAnonymous()" />
        <intercept-url pattern="/**" access="isAuthenticated()" />
        <intercept-url pattern="/upload" access="hasRole('ROLE_ADMIN')" />
        <form-login login-page="/login" default-target-url="/" always-use-default-target="false" authentication-failure-url="/login-error"/>
        <remember-me/>
        <logout />
    </http>
<global-method-security secured-annotations="enabled" />
    <authentication-manager>
        <authentication-provider>
            <jdbc-user-service data-source-ref="dataSource"/>
        </authentication-provider>
    </authentication-manager>
</beans:beans>

和我的database-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" 
        destroy-method="close">
        <property name="driverClassName" value="${dataSource.driverClassName}" />
        <property name="url" value="${dataSource.url}" />
        <property name="username" value="${dataSource.username}" />
        <property name="password" value="${dataSource.password}" />

</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
<property name="dataSource" ref="dataSource"></property>  
</bean>
</beans>

我不喜欢这些XML配置,因为我宁愿对应用程序进行编程控制,但我不是那个选择和设计应用程序架构的人,所以它和&#我正在做的事情。如果我们没有使用基于XML的配置,我就能够以编程方式检查错误的连接并轻松地重新建立。

在使用基于XML的配置从暂停(或长时间缺席?)返回后,如何让应用程序重新建立连接?

1 个答案:

答案 0 :(得分:0)

使用autoReconnect = true配置连接字符串。这是URL连接字符串的属性,它在驱动程序级别工作。您需要更改数据源配置中的连接字符串。以下URL用于mysql。 Postgres必须有一些方法来做到这一点。

url="jdbc:mysql://localhost:3306/yourDB?autoReconnect=true"

或者你可以在postgres配置文件中增加超时。