我有一种可以用以下步骤描述的方法:
步骤按顺序执行。但是,这是一种缓慢的方法,我想并行化STEP1和STEP 2,因为它们是独立的。重要的是要知道3个临时表具有“ ON COMMIT DELETE ROWS”子句,因此所有步骤必须在单个事务中执行。
private void temporaryTables() {
String st1 = "insert into table1(name) values('joe')";
String st2 = "insert into table2(name) values('foo')";
jdbcTemplate.update(st1);
jdbcTemplate.update(st2);
//Arrays.asList(st1,st2).parallelStream().map(x -> {
// jdbcTemplate.update(x);
//});
//if I use parallel stream and I select both tables, one table is empty.
}
@Transactional
public List<Response> method() {
temporaryTables();
return jdbcTemplate.query(SELECT_TABLE_3, new BeanPropertyRowMapper<>(Response.class));
}
如果我取消注释并行代码,它将无法按预期运行。它只能与调用者线程一起使用,另一个线程将无法在同一事务中执行,并且由于一个临时表为空,因此STEP 3将失败。
我还尝试了原始JDBC事务。但是,我无法共享Connection对象,因为它是同步的。
我该如何解决这个问题?