我已成功使用 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/