本篇文章根据我曾经的一个去O项目,分享系统去O的一些经验。
一、去O准备工作
1.1 整理Oracle表,建立对应的MySQL表,主要有2点,一是分析表数据量,MySQL表性能能否承受住,二是处理MySQL表与Oracle表的字段差异,比如Oracle表金额一般用number字段,对应到MySQL表需要转换为decimal(m,d),小数位数需要根据表中数据分析。
1.2 梳理系统模块,如果系统规模较大,模块较多,建议采用分批次去O,因此需要梳理出能够在同一批次去O的模块。去O主要是对mapper.xml文件替换,因此同一批次去O的maper.xml文件应该同属一个功能模块,不受其他功能影响,也不影响其他功能。
二、数据同步
MySQL表建立好之后,Oracle表需要做数据同步,将数据实时同步至MySQL表。
三、系统改造
3.1 添加MySQL DataSource。
<bean id="mysqlDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
<property name="user" value=""/>
<property name="password" value=""/>
</bean>
3.2 建立分批次去O的mapper接口包,用于存放本批次去O的mapper文件。例如:com.test.mapper.mysql1,将本次改造的mapper接口移动到改目录下。因为mapper接口路径改变了,因此系统中注入这些mapper接口的地方路径也需要调整。
3.3 建立分批次去O的xml包,用于存放本批次去O的mapper.xml文件。例如:com.test.mapper.mysql1,根据Oracle的xml文件创建对应的MySQL xml文件。Oracle原xml文件不需要删除。
3.4 spring配置文件改造
3.4.1 配置MySQL xml文件的SqlSessionFactory
<bean id="mysql1SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="mysqlDataSource" />
<property name="mapperLocations" value="classpath*:com/test/mapper/mysql1/*.xml" />
</bean>
3.4.2 配置mybatis mapper扫描,这样mybatis在扫描mapper接口的时候就会将本次去O的mapper与配置的MySQL xml文件关联起来,系统执行mapper接口的时候,就会执行到新建立的MySQL xml语句。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="mysql1SqlSessionFactory"/>
<property name="basePackage" value="com.test.mapper.mysql1"/>
</bean>