版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16055765/article/details/86604702
public class SyncData implements SimpleJob {
public static Logger logger = LoggerFactory
.getLogger(SyncData .class);
@Value("${elasticJob.sendRegionToALPS.pathname}")
private String pathname;
@Value("${legalFtp.tempFilePath}")
private String tempFilePath;
/**
* 重试次数(临时)
*/
@Value("${sync.retry.times}")
private Integer times;
/**
* 重试时间间隔
*/
@Value("${sync.retry.interval}")
private Long interval;
/**
* 重试次数
*/
@Value("${sync.retry.times}")
private Integer totalTime;
@Override
public synchronized void execute(ShardingContext arg0) {
Long startTime=System.currentTimeMillis();
logger.info("开始写入数据: 开始时间="+startTime)
try {
//业务代码
this.reset();
} catch (Exception e) {
e.printStackTrace();
if(!this.retry()){
this.reset();
//插入操作日志
}
}
}
//重试
private boolean retry(){
times--;
if(times>=0){
try {
Thread.sleep(interval);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
execute(null);
return true;
}else{
this.reset();
return false;
}
}
//重置次数
private void reset(){
this.times=totalTime;
}
}
可参考主要思路,但不是十分好的重试机制,考虑到业务性能,应该重试某个业务环节最好
若有更好的重试思路,请多多指教,谢谢