如何让框架为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>