Oracle数据迁移到Mysql的引擎设计及实现
设计初衷
在一次项目中,因为需求需要,再保证Oracle数据不提供直接读取求改的条件下,进行部分试图内的数据迁移,迁移到当时项目所自行设计的Mysql业务内;由于考察了市场的一些数据迁移软件后,觉得没有自己设计更灵活和轻量级,因此自己做了尝试;可能还不完善,期待探讨交流;
整体思路
- 利用SpringBoot轻量级应用
- 涉及部分Mysql与Oracle基本操作内容
- yml 数据源主配置为mysql,Oracle连接部分设计连接类
- 数据定时同步- - -采用@EnableScheduling实现的TimerAction
- 数据持久层操纵 整合了Mybatis(plus也可)
- DBMS 管理系统采用Navicat 比较方便,可以同时整合连接oracle和mysql
- Oracle数据库密码设置从本地指定文件目录读取,便于项目启动后数据库 密码的修改
具体案例实现(代码)
- 数据库连接类(与Oracle)
public class Conn {
//数据库预加载信息
static String driverClass="oracle.jdbc.driver.OracleDriver"; //oracle的驱动
//连接oracle路径方式 “orcl”是要建立连接的数据库名 1521端口
public static Connection getConnection() throws ClassNotFoundException, SQLException, FileNotFoundException, IllegalAccessException, InstantiationException {
String url="";
String user = "";
String password = "";
File file =new File("D:/OracleInfo.txt");
Scanner input=new Scanner(file);
while(input.hasNext()){
url = input.nextLine();
user = input.nextLine();
password = input.nextLine();
}
input.close();
Connection connection = null;
Class.forName(driverClass).newInstance();
connection = DriverManager.getConnection(url, user, password);
System.out.println("Oracle数据库连接成功,用户:"+ user);
return connection;
}
}
- 对应的SpringBoot中项目连接数据源dataSource及其他相关配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/xxxx?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: xxxx
password: xxxx
mybatis:
mapperLocations: classpath*:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
server:
port: 8088
tomcat:
uri-encoding: UTF-8
- 对应TimerAction样例:
@Scheduled(cron = "0 0/50 * * * ?")
public void TestTimer() {
log.info("This is stuCourseTimer,present clock:[{}]", LocalTime.now().toString());
try {
Connection conn;
ResultSet result;
Statement state = null;
//样例 自己按照需要写sql语句即可
String sql = "select *****";
conn = Conn.getConnection();
if (conn != null){
state = conn.createStatement();
}
assert state != null;
result = state.executeQuery(sql);
while (result.next()) {
String test1= result.getString("xxx");
String test2= result.getString("xxx");
if (transportMapper.findXXXByXXX(test1, test2) == null) {
String test3= result.getString("xxxxxx");
if (userMapper.findByXXXXX(xxx) == null) {
//自己写即可
} else if (xxx == null) {
//自己写即可
}
Integer XXX= userMapper.findXXX(aaa).getId();
Integer XXX= XXXMapper.findXXX(bbb);
transportMapper.insertXXXInfo(id1, id2, Content)
}
}
sql = "select * from XXX";
result = state.executeQuery(sql);
while (result.next()) {
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
- 在对应的XML中写入具体sql操作即可;
By Daniel Smith-答
期待与大家交流;
本文介绍了一种在Oracle数据无法直接读取的情况下,使用SpringBoot进行Oracle到Mysql的数据迁移方法。通过自定义数据库连接类、定时任务和Mybatis实现数据同步。配置文件中设置数据源,并在代码中读取Oracle密码文件,实现数据库连接。使用Navicat作为DBMS管理工具,展示了定时任务执行SQL查询和数据插入的示例。

2912

被折叠的 条评论
为什么被折叠?



