java重试机制的编写(本例子在elastic中,可能还有其他方案)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }

}

可参考主要思路,但不是十分好的重试机制,考虑到业务性能,应该重试某个业务环节最好

若有更好的重试思路,请多多指教,谢谢

猜你喜欢

转载自blog.csdn.net/qq_16055765/article/details/86604702