Java快速迁移脚本中的数据到数据库
mybatis-flex、oracle、beecp、hutool
创建一个Java的Maven工程,添加依赖。
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-core</artifactId>
<version>1.11.6</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.40</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.21</version>
</dependency>
<dependency>
<groupId>com.github.chris2018998</groupId>
<artifactId>beecp</artifactId>
<version>4.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.13</version>
</dependency>
Java代码
package top.lingkang;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.row.Db;
import com.mybatisflex.core.row.Row;
import org.apache.ibatis.logging.nologging.NoLoggingImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stone.beecp.BeeDataSource;
import org.stone.beecp.BeeDataSourceConfig;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author lingkang
* created by 2026/4/9
*/
public class Move01 {
private static AtomicInteger count = new AtomicInteger(0);
private static final Logger log = LoggerFactory.getLogger(Move01.class);
public static void main(String[] args) throws Exception {
BeeDataSourceConfig config = new BeeDataSourceConfig();
config.setDriverClassName("oracle.jdbc.OracleDriver");
config.setJdbcUrl("jdbc:oracle:thin:@10.100.0.77:1521:zb?useUnicode=true&characterEncoding=UTF-8");
config.setUsername("zbUser");
config.setPassword("zbPassword");
config.setMaxActive(20);
BeeDataSource dataSource = new BeeDataSource(config);
MybatisFlexBootstrap.getInstance()
.setDataSource(dataSource)
// .setLogImpl(StdOutImpl.class) //日志输出配置
.setLogImpl(NoLoggingImpl.class)// 忽略日志
.start();
Row row = Db.selectOneBySql("select * from T_RESERVE where rownum = 1");
System.out.println(row.toString());
long start = System.currentTimeMillis();
List<String> lines = FileUtil.readLines("C:\\Users\\Administrator\\Desktop\\XXXXX_202604091706.sql", StandardCharsets.UTF_8);
final int total = lines.size();
log.info("插入数据量:{}", total);
// 分成20份
List<List<String>> partition = ListUtil.partition(lines, 20);
// 20个线程
ExecutorService service = Executors.newFixedThreadPool(20);
for (List<String> list : partition) {
service.submit(() -> {
for (String sql : list) {
if (StrUtil.isBlank(sql))
continue;
// 截去最后一个 ; 分号
Db.insertBySql(sql.substring(0, sql.length() - 1));
count.addAndGet(1);
}
});
}
// 用于观察进度
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 999; i++) {
ThreadUtil.sleep(2000);
log.info("当前插入数据: {} / {}", count.get(), total);
if (service.isTerminated()) {
log.info("耗时:{}ms", System.currentTimeMillis() - start);
break;
}
}
}
});
thread.start();
// 处理完成就关闭
service.shutdown();
}
}