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

 

posted @ 2022-03-09 16:16  诺宝宝  阅读(43)  评论(0编辑  收藏  举报