0

あるデータベース テーブルから数千行を抽出し、別のデータベース テーブルに挿入しています。すべてのレコードをメモリにロードしてから、他のデータベースに挿入したくありません。

そのため、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*/)
            }
        });
}

同じ BlockingQueue を使用してメモリ内の行数を制限できるように、EXTRACTOR と INSERTER を実装する方法を教えてください。

これは正しいアプローチですか?jdbcTemplate は引き続き使用できますか? これを行うための最もインテリジェントで便利な方法は何ですか?

みんなありがとう

ところで、トランザクションは、挿入される抽出された要素を保持するオブジェクトのクラスです。

4

1 に答える 1