背景:
我们需要从表里取数-打标记-然后处理。因为并发执行,所以我们要保证取数-标记是一个事务,于是我们取数时用了for update操作。
代码如下,其中有部分是伪代码,明白逻辑即可,暂且把涉及到的表记作A表。(全文只用到这一张表)
SqlSession sqlSession = this.sessionFactory.openSession(false);
Log.info("get SqlSession=%s", sqlSession);
try {
TaskDownloadMapper taskDownloadMapper = sqlSession.getMapper(TaskDownloadMapper.class);
TaskDownloadModel taskDownloadModel = taskDownloadMapper.getForUpdate();
if (taskDownloadModel != null) {
Log.info("update taskDownloadModel status,model:%s", JSONObject.toJSONString(taskDownloadModel));
taskDownloadModel.setStatus(DbDef.TASK_DOWNLOAD_STATUS_RUNNING);
taskDownloadMapper.updateStatusById(taskDownloadModel); //更新状态
Log.info("update taskDownloadModel success");
}
return taskDownloadModel;
}finally {
Log.info("commit sqlS