2010-09-27 62 views
1

我在過去幾週一直在使用Spring Framework 3.0,並且給我留下了深刻的印象。這是我第一個使用Java的項目。我的主要問題是我找不到一種方法讓最終用戶在Web應用程序內管理自己的數據庫連接。我正在進行的項目將安裝在客戶端的計算機上,他們將提供所有連接信息。此時,每當數據源不可用,我得到一個錯誤,我不知道如何處理:如何在Spring MVC Web應用程序中管理數據庫設置?

java.sql.SQLException: Network error IOException: Connection refused 

我試圖延遲加載XML配置的數據源,但它仍然在加載時應用的預期間啓動 - 實例化單身人士階段。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"  
    lazy-init="true">  
    <property name="driverClassName" value="${jdbc.driver}" /> 
    <property name="url" 
     value="${jdbc.urlprefix}://${jdbc.server}:${jdbc.port}/${jdbc.database}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <property name="initialSize" value="2" /> 
    <property name="maxActive" value="5" /> 
</bean> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
    lazy-init="true"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="hibernateProperties"> 
     <props> 
     <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
     <prop key="hibernate.show_sql">false</prop> 
     </props> 
    </property> 
    <property name="annotatedClasses"> 
     <list> 
      .... 
     </list> 
    </property> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
    lazy-init="true"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

我希望當數據庫不可用或不正確的配置我可以將用戶重定向到不依賴於數據庫連接,這樣的設置可以管理上的頁面。我只是不確定在IoC容器期望從一開始就正確配置DataSource時如何實現這一點。

預先感謝您!

回答

0

這是一個黑客....使用內存數據庫作爲默認配置。

如果系統啓動時,它仍然是默認的數據庫,那麼你知道發生了錯誤。

1

Spring的AbstractRoutingDataSource是一箇中介數據源,它將getConnection()調用路由到另一個目標DataSource,確定了運行時間。將缺省目標數據源設置爲內存數據庫,以便在加載應用程序上下文時有數據庫可以連接到該數據庫。當用戶提供連接信息時,您的AbstractRoutingDataSource子類可以路由到使用連接信息配置的另一個數據源。

相關問題