gpt4 book ai didi

java - 插入期间数据库删除失败

转载 作者:行者123 更新时间:2023-12-01 16:01:53 26 4
gpt4 key购买 nike

我有两个 Java 应用程序:其中一个将记录插入到 Table1。第二个应用程序读取前 N 项并将其删除。当第一个应用程序插入数据密集型时,当我尝试删除带有 CannotSerializeTransactionException 的任何行时,第二个应用程序失败。我没有看到任何问题:仅当插入事务完成时,插入的项目在选择/删除中才可见。我该如何修复它?谢谢。

 TransactionTemplate tt = new  TransactionTemplate(platformTransactionManager);  
tt.setIsolationLevel(Connection.TRANSACTION_SERIALIZABLE);
tt.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
List<Record> records = getRecords(); // jdbc select
if (!records.isEmpty()) {
try {
processRecords(records); // no database
removeRecords(records); // jdbc delete - exception here
} catch (CannotSerializeTransactionException e) {
log.info("Transaction rollback");
}
} else {
pauseProcessing();
}
}
});

pauseProcessing() - sleep

public void removeRecords(int changeId) { String sql = "delete from RECORDS where ID <= ?";
getJdbcTemplate().update(sql, new Object[]{changeId});}

最佳答案

您是否也在第一个应用程序中使用Connection.TRANSACTION_SERIALIZABLE?看起来第一个应用程序锁定了表,因此第二个应用程序无法访问它(无法启动事务)。也许 Connection.TRANSACTION_REPEATABLE_READ 就足够了?

也许您还可以将第二个应用程序配置为在无法访问资源时不抛出异常,而是等待它。

关于java - 插入期间数据库删除失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3652224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com