我正在从一个数据库表中提取数千行并插入到另一个数据库表中。我不想将所有记录加载到内存中,然后插入到另一个数据库中。
因此,我正在尝试使用 BlockingQueue 使用一个线程加载提取器结果,并使用另一个线程同时插入另一个数据库。我正在使用 Spring JdbcTemplate 来访问我的数据库。
这是我的计划
public void performExtractionInsertion(JdbcTemplate inboundJdbcTemplate, JdbcTemplate outboundJdbcTemplate){
final BlockingQueue queue = new LinkedBlockingQueue<Transaction>(50);
ExecutorService executor = Executors.newFixedThreadPool(2);
final String SELECT_QUERY = "SELECT acc_number, date, type FROM transactions";
final String INSERT_QUERY = "INSERT INTO analysis(col1, col2, col3) VALUES(?,?,?)";
executor.execute(new Runnable() {
@Override
public void run() {
queue.put(/*IMPLEMENTATION OF EXTRACTOR USING inboundJdbcTemplate*/);
}
});
executor.execute(new Runnable() {
@Override
public void run() {
queue.take(/*IMPLEMENTATION OF INSERTER USING outboundJdbcTemplate*/)
}
});
}
有人可以告诉我如何实现 EXTRACTOR 和 INSERTER 以便他们使用相同的 BlockingQueue 来限制内存中的行数吗?
这是正确的方法吗?我还能使用 jdbcTemplate 吗?最智能、最方便的方法是什么?
多谢你们
顺便说一句,事务是要保存要插入的提取元素的对象的类。