1. 程式人生 > 其它 >如何讓框架為Struts2+Spring+Springjdbc資料庫為oracle的老專案相容mysql

如何讓框架為Struts2+Spring+Springjdbc資料庫為oracle的老專案相容mysql

業務背景:

該系統公司從2004年就開始線上用了,沉澱的東西太多,是一個通用專案釋出多個地方,突然有個地方需要換成mysql的,功能不變。

重寫系統肯定是不現實的,客戶也等不了那麼久,所以只能在此程式碼上做改進既相容以前的oracle,也相容mysql。

如何解決:

抱著改動程式碼最少後期好維護的原則,最後決定除了dao的實際類重新寫個mysql版的,其它全部共用。

需要考慮的問題:

1.此係統為struts,所有的注入關係都是通過配置檔案來做的,前後端的耦合度特別高,有配置action與jsp、action與service、service與dao、dao與jdbc的一層層的建立注入關係的

這邊dao到了具體的實現類,這邊必須改成註解形執的注入不能通過配置檔案

2.一個dao介面被兩個類實現會報org.springframework.beans.factory.BeanDefinitionStoreException,Spring會分不清要使用哪一個,這邊需要考濾一下具體怎麼解決

3.資料檔案要寫兩個配置檔案,用哪個的時候就引用哪個檔案

解決方案:

1.把service與dao、dao與jdbc的配置檔案改成通過類的註解注入進去

2.加mysql的dao實現類,實現原來的dao介面類

3.更改Spring配置檔案applicationContext.xml,具體如下

不要用哪個資料庫就把哪個放開,context:exclude-filter對於exclude,即使expression後面的包在base-package下面,也不掃描。

    <context:component-scan base-package="com.shensu.jsjm">
        <!-- <context:exclude-filter type="regex" expression="com.shensu.jsjm.jdbc.dao.oracleimpl..*"/> -->
        <context:exclude-filter type="regex" expression="com.shensu.jsjm.jdbc.dao.mysqlimpl..*"/>
    </context:component-scan
>

資料庫配置檔案,用哪個引入哪個

    <!-- spring 載入資料配置檔案 -->
    <bean id="propertyPlaceholderConfigurer" class="com.shensu.util.CustomizedPropertyConfigurer">
        <property name="locations" >
            <list>
              <!-- <value>classpath:config/config_mysql.property</value> -->
              <value>classpath:config/config.property</value>
            </list>
        </property>
    </bean>