如何讓框架為Struts2+Spring+Springjdbc資料庫為oracle的老專案相容mysql
阿新 • • 發佈:2022-03-09
業務背景:
該系統公司從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>