Commit b0852bca authored by zhangyingbin's avatar zhangyingbin

解决redis锁死锁问题

parent 048f37f4
...@@ -34,6 +34,7 @@ import com.yeejoin.amos.feign.systemctl.model.RegionModel; ...@@ -34,6 +34,7 @@ import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -106,6 +107,25 @@ public class CompanyController extends BaseController { ...@@ -106,6 +107,25 @@ public class CompanyController extends BaseController {
@Autowired @Autowired
SuperviseRuleServiceImpl superviseRuleService; 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库 * tzs注册时同步ugp库
* *
......
...@@ -77,7 +77,8 @@ public class OrgServiceImpl { ...@@ -77,7 +77,8 @@ public class OrgServiceImpl {
*/ */
public OrgUsrDto dataHandling(JSONObject jsonObject, String bizOrgType,String sequenceNbr){ public OrgUsrDto dataHandling(JSONObject jsonObject, String bizOrgType,String sequenceNbr){
Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1"); Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1");
if(lock) { try {
if (lock) {
OrgUsr orgUsr = saveOrgUsr(jsonObject, bizOrgType, sequenceNbr); OrgUsr orgUsr = saveOrgUsr(jsonObject, bizOrgType, sequenceNbr);
sequenceNbr = String.valueOf(orgUsr.getSequenceNbr()); sequenceNbr = String.valueOf(orgUsr.getSequenceNbr());
//条件构造器 找出column表种 类型为(COMPANY 或 DEPARTMENT 或 PERSON)的列 //条件构造器 找出column表种 类型为(COMPANY 或 DEPARTMENT 或 PERSON)的列
...@@ -125,15 +126,22 @@ public class OrgServiceImpl { ...@@ -125,15 +126,22 @@ public class OrgServiceImpl {
OrgUsrDto orgUsrDto = new OrgUsrDto(); OrgUsrDto orgUsrDto = new OrgUsrDto();
BeanUtils.copyProperties(orgUsr, orgUsrDto); BeanUtils.copyProperties(orgUsr, orgUsrDto);
orgUsrDto.setDynamicFormValue(dynamicFormInstanceList); orgUsrDto.setDynamicFormValue(dynamicFormInstanceList);
redisTemplate.delete("lock");
return orgUsrDto; return orgUsrDto;
} else { } else {
try{ try {
Thread.sleep(100); Thread.sleep(100);
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace();
}
return dataHandling(jsonObject, bizOrgType, sequenceNbr);
}
}catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null;
} finally {
if(lock) {
redisTemplate.delete("lock");
} }
return dataHandling(jsonObject,bizOrgType,sequenceNbr);
} }
} }
...@@ -648,7 +656,8 @@ public class OrgServiceImpl { ...@@ -648,7 +656,8 @@ public class OrgServiceImpl {
*/ */
public void saveOrUpdateUser(JSONObject jsonObject, String orgType) { public void saveOrUpdateUser(JSONObject jsonObject, String orgType) {
Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1"); Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock","1");
if(lock) { try {
if (lock) {
boolean isCharge = false; boolean isCharge = false;
String amosOrgId = jsonObject.getString("sequenceNbr"); String amosOrgId = jsonObject.getString("sequenceNbr");
LambdaQueryWrapper<OrgUsr> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrgUsr> wrapper = new LambdaQueryWrapper<>();
...@@ -835,15 +844,21 @@ public class OrgServiceImpl { ...@@ -835,15 +844,21 @@ public class OrgServiceImpl {
} }
//保存或更新 根据sequenceNbr //保存或更新 根据sequenceNbr
alertFormValueServiceImpl.saveOrUpdateBatch(dynamicFormInstanceList); alertFormValueServiceImpl.saveOrUpdateBatch(dynamicFormInstanceList);
redisTemplate.delete("lock"); } else {
}else { try {
try{
Thread.sleep(100); Thread.sleep(100);
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
saveOrUpdateUser(jsonObject, orgType); saveOrUpdateUser(jsonObject, orgType);
} }
}catch (Exception e) {
e.printStackTrace();
} finally {
if(lock) {
redisTemplate.delete("lock");
}
}
} }
public static String getOrgCodeStr() { 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