我有两个访问一个mySql表的java进程,一个正在读取数据而另一个正在写入。我需要在写操作期间将读取等待。
我使用spring-data并尝试配置transactionTemplate,但似乎它无法正常工作。这是写方法:
public boolean upadteVisualizationTable(HashMap<String, LabResultVisualization> labResultVisualizations) {
//use TransactionCallbackWithoutResult handler if ur query doesnt result anything
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus paramTransactionStatus) {
try {
logger.debug("Removing LabTestVisualization ");
[....]
} catch (Exception ex) {
logger.error("Something goes wrong on the transaction: ", ex);
paramTransactionStatus.setRollbackOnly();
}
}
});
logger.info("LabTestVisualization Table updated");
return true;
}
这是读:
public boolean checkPanelsExist(final String loinc) {
return transactionTemplate.execute(new TransactionCallback<Boolean>() {
public Boolean doInTransaction(TransactionStatus paramTransactionStatus) {
try {
[...]
} catch (Exception ex) {
return false;
}
}
});
}
问题是在写操作期间不执行读操作。这会产生数据不一致。如果写入仍在运行,如何判断读取事务是否等待?
我也试过使用@Transacional注释但没有成功。