如何使用Spring JDBCTemplate使用“ for update” sql锁定行

时间:2019-02-27 19:12:03

标签: spring transactions spring-jdbc jdbctemplate spring-transactions

我正在使用spring jdbc模板执行选择和更新操作,并且通过sql语句如下所示。如果我启动了我的应用程序的2个实例(说Transaction1和Transaction2),即使它们都选择了相同的记录集,Transaction2也应等待,直到Transaction1提交为止。但事实并非如此。 Transaction2能够更新数据库。

注意:getNotCompletedRecords()和updateStatusToInProgress()方法分别使用JDBCTemplate的query()和batchUpdate()方法。

@Transactional
public synchronized List<Student> processStudentRecords(){
List<Student> students = getNotCompletedRecords();
if(null != students && students.size() > 0){
    updateStatusToInProgress(students);
}
return student;
}

select * from STUDENTS where DEPATMENT_ID in (select distinct (department_id) from STUDENTS where status = 'NOT PROCESSED') fetch FIRST 5 rows only) for update

0 个答案:

没有答案