Commit b0852bca authored by zhangyingbin's avatar zhangyingbin

解决redis锁死锁问题

parent 048f37f4
......@@ -34,6 +34,7 @@ import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
......@@ -106,6 +107,25 @@ public class CompanyController extends BaseController {
@Autowired
SuperviseRuleServiceImpl superviseRuleService;
@Autowired
private RedisTemplate redisTemplate;
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/getRedisLock")
@ApiOperation(httpMethod = "get", value = "检查redis锁情况", notes = "检查redis锁情况")
public ResponseModel<Boolean> getRedisLock(){
Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1");
return ResponseHelper.buildResponse(lock);
}
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/deleteRedisLock")
@ApiOperation(httpMethod = "get", value = "删除redis锁", notes = "删除redis锁")
public ResponseModel<Boolean> deleteRedisLock(){
Boolean lock = redisTemplate.delete("lock");
return ResponseHelper.buildResponse(lock);
}
/**
* tzs注册时同步ugp库
*
......
......@@ -77,7 +77,8 @@ public class OrgServiceImpl {
*/
public OrgUsrDto dataHandling(JSONObject jsonObject, String bizOrgType,String sequenceNbr){
Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1");
if(lock) {
try {
if (lock) {
OrgUsr orgUsr = saveOrgUsr(jsonObject, bizOrgType, sequenceNbr);
sequenceNbr = String.valueOf(orgUsr.getSequenceNbr());
//条件构造器 找出column表种 类型为(COMPANY 或 DEPARTMENT 或 PERSON)的列
......@@ -125,15 +126,22 @@ public class OrgServiceImpl {
OrgUsrDto orgUsrDto = new OrgUsrDto();
BeanUtils.copyProperties(orgUsr, orgUsrDto);
orgUsrDto.setDynamicFormValue(dynamicFormInstanceList);
redisTemplate.delete("lock");
return orgUsrDto;
} else {
try{
try {
Thread.sleep(100);
} catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
}
return dataHandling(jsonObject, bizOrgType, sequenceNbr);
}
}catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if(lock) {
redisTemplate.delete("lock");
}
return dataHandling(jsonObject,bizOrgType,sequenceNbr);
}
}
......@@ -648,7 +656,8 @@ public class OrgServiceImpl {
*/
public void saveOrUpdateUser(JSONObject jsonObject, String orgType) {
Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1");
if(lock) {
try {
if (lock) {
boolean isCharge = false;
String amosOrgId = jsonObject.getString("sequenceNbr");
LambdaQueryWrapper<OrgUsr> wrapper = new LambdaQueryWrapper<>();
......@@ -835,15 +844,21 @@ public class OrgServiceImpl {
}
//保存或更新 根据sequenceNbr
alertFormValueServiceImpl.saveOrUpdateBatch(dynamicFormInstanceList);
redisTemplate.delete("lock");
}else {
try{
} else {
try {
Thread.sleep(100);
} catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
}
saveOrUpdateUser(jsonObject, orgType);
}
}catch (Exception e) {
e.printStackTrace();
} finally {
if(lock) {
redisTemplate.delete("lock");
}
}
}
public static String getOrgCodeStr() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment