基于spring事务的接口极短时间被调用2次时有冲突
迷雾骑士 2016-12-02 10:56:30 基于spring事务的接口call()极短时间被调用2次,该接口的逻辑为:先查数据库,判断是否存在记录A,若存在则对A进行更新;否则插入记录A。
前提:数据库中不存在数据A,此时开始对接口极短时间(可认为是同一时间)连续调用2次。
假设第一次调用还未结束,其事务还未被提交,因为数据库中A不存在,故在第一次调用结束后,应该是往数据库中写入数据A;
接着第二次调用开始,因为第一次调用的事务未被提交,故数据A还没有被写入数据库,第二次调用时,查询数据库,发现不存在A数据,故接口的逻辑会再次写入A数据。结果:数据A被连续写入数据库2次。
请问:该问题如何避免?期待的结果应该是:不管在如何短的时间内,该接口被调用多少次,A数据只应该在数据库中出现一次。