java - 如何使用两个 Multi-Tenancy 数据源之间的事务复制数据?

标签 java jdbc database-connection multi-tenant

我已成功使用 article 设置 Multi-Tenancy 数据源。结果我有两个连接,我可以通过

MultiTenantConnectionProvider provider = ctx.getBean(MapMultitenantConnectionProvider.class);

Connection main = provider.getConnection("main");
Connection alt = provider.getConnection("alt");

这两个连接都是PgConnection.class类型(Connection接口(interface)),并且支持事务管理和我需要的所有东西。但我还需要将足够的大数据从第一个连接传递到另一个连接,而无需分析或任何数据过滤。

我已经成功地迭代了 ResultSet,通过

实现
String getCompaniesQuery = "select * from companies";
String setRecordQuery = "insert into companies (company) values (?)";

try (Connection main = provider.getConnection("main");
     Connection alt = provider.getConnection("alt")) {

    PreparedStatement companies = main.prepareStatement(getCompaniesQuery);
    ResultSet set = companies.executeQuery();

    while (set.next()) {

        PreparedStatement records = alt.prepareStatement(setRecordQuery);
        records.setString(1, set.getString(1));

        records.execute();
        alt.commit();
    }            

} catch (SQLException e) {
    e.printStackTrace();
}

但是这个迭代让我感到不高兴。

请给我建议,或者为我指明有效操作方式(可能使用流和 lambda)的方向(或框架),而不是手动迭代结果集以将数据从 alt 传递到 main(提到的连接)?

数据库中所有表的结构都是相同的。

最佳答案

无论您对流、lambda 或 ORM 映射做了什么聪明的事情……幕后都是 SQL select 和 insert 语句。以及结果集的迭代。

如果您想在不使用 SQL select/insert/iteration 的情况下传输数据,那么您需要寻找特定于数据库的支持,以在数据库之间复制或同步数据。

例如,对于 Oracle,您可以使用如下内容:

INSERT into local_table select * from table@database_link; 

/* SQLPlus */
COPY FROM database TO database CREATE destination_table
     [(column, column, column, ...)] USING query

其中数据库的格式为用户名[/密码]@connect_identifier

(来源:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9532217300346683472)

关于java - 如何使用两个 Multi-Tenancy 数据源之间的事务复制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273543/

相关文章:

java - MySQL JDBC 连接器无法编译?

database - Shared Access 2010 数据库处于不一致状态

Java - 内存管理/数据库连接问题

sql-server - 如何通过 jTDS 驱动程序使用 Trusted_connection 属性?

java - 如何在Spring Boot ireport中从applicaiton.properties获取MySQL连接

java - 如何同时使用导航规则和 f :ajax

java - 哪个 xml validator 将完美地用于多线程项目

java - JVM 中可以驻留多少个类文字实例?

java - 如何将 dbcp 连接转换为 oracle 连接?

java - 如何从 Java 中的 ResultSetMetaData 获取不同的数据类型?