2014-04-16 55 views
0

我正在使用spring安全性,它在某些bean xml配置中使用jdbcTemplate。當我將開發筆記本電腦休眠並稍後再開始工作時,當嘗試恢復測試應用程序時,我收到「此連接已關閉」。從掛起返回後,Spring應用程序中的「連接已關閉」

我知道如何恢復的唯一方法是繁瑣地重新啓動本地服務器,該服務器通過Internet連接到數據庫(postgreSQL)。

是否有某種方式讓應用程序在從暫停(或長時間?)返回後重新建立jdbc連接,而不是反覆顯示連接錯誤,並且從不重新建立連接?

我的安全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> 

和我的數據庫的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的配置從暫停(或長期缺勤?)返回後重新建立連接?

回答

0

使用autoReconnect = true配置連接字符串。這是URL連接字符串的一個屬性,它在驅動程序級別工作。您需要更改數據源配置中的連接字符串。下面的URL用於mysql的情況。 Postgres一定有辦法做到這一點。

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

或者你可以增加postgres配置文件的超時時間。

+0

謝謝您的建議!我嘗試了'url =「jdbc:postgresql:// localhost:5432/yourDB?autoReconnect = true」'但它似乎不起作用。 – trusktr

相關問題