Spring-data TransactionTemplate在写入一致性后读取

时间:2016-05-16 14:08:59

标签: java spring concurrency spring-data spring-transactions

我有两个访问一个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注释但没有成功。

0 个答案:

没有答案