当想在机器上部署一个定时任务,而不想在分布式的所有机器上都执行,可以通过一个分布式数据库锁来实现:
public ServiceResult<Long> getPartyOrgLock(String type){
ServiceResult<Long> result = new ServiceResult<>();
result.setSuccess(false);
if (StringUtils.isBlank(type)){
logger.error("getPartyOrgLock param lack");
return result;
}
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
String date = formatter.format(new Date());
Long lockName = Long.valueOf(date + type);
// 表上的字段为unique
int insert = partyOrgLockMapper.insertLock(lockName);
if (insert != 0){
result.setSuccess(true);
result.setResult(lockName);
}
} catch(Exception e){
if (logger.isInfoEnabled()){
logger.info("get partyOrgLock fail");
}
}
return result;
}
同时不删除锁,在不同机器时间不同的情况下,也可以保证每5分钟执行一次