[英]Spring Integration JDBC Batch Insert
我需要插入要插入數據庫的POJO列表。 我有一個存儲過程,一次執行一次插入。 在當前的實現中,我有一個拆分器,它拆分POJO並將該有效負載傳遞給存儲的proc出站網關以調用我的存儲過程。
在實時場景中,我的列表大小可能高達500K。 那么有沒有辦法更好地實施? 有沒有辦法在SI流程中執行批量插入?
謝謝
我寫了提到的自定義出站通道適配器,它使用spring-jdbc批處理能力:
public class ArrayListSqlBatchOBCA {
private final static Logger log = LoggerFactory.getLogger(ArrayListSqlBatchOBCA.class);
private NamedParameterJdbcTemplate template;
private String sql;
public void process(Message<? extends ArrayList<?>> message) throws Exception {
try {
ArrayList<?> list = (ArrayList<?>) message.getPayload();
SqlParameterSource[] batchArgs = new SqlParameterSource[list.size()];
for (int i = 0; i < list.size(); i++) {
batchArgs[i] = new BeanPropertySqlParameterSource(list.get(i));
}
template.batchUpdate(sql, batchArgs);
}
catch (Exception e) {
log.error("Exception while processing message", e);
throw e;
}
}
}
這就是我使用它的方式(XML配置):
<channel id="cc"/>
<outbound-channel-adapter channel="cc" method="process">
<beans:bean class="mypackage.ArrayListSqlBatchOBCA">
<beans:property name="template" ref="jdbcTemplate"/>
<beans:property name="sql"
value="INSERT INTO test (field1,field2,field3)
VALUES (:f1,:f2,:f3)"/>
</beans:bean>
</outbound-channel-adapter>
此外,我將?reWriteBatchedInserts=true
添加到我的數據源的jdbc url(我使用postgres JDBC驅動程序)。
有關該選項的文檔 :
reWriteBatchedInserts - 啟用優化以重寫和折疊已批處理的兼容INSERT語句。 如果啟用,pgjdbc insert into ... values(?, ?)
批量重寫insert into ... values(?, ?)
insert into ... values(?, ?), (?, ?), ...
這樣,使用一個小的自定義代碼,我從輸入集合一次插入多行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.