content: package com.xxl.job.admin.core.route.strategy;
  
  import com.xxl.job.admin.core.route.ExecutorRouter;
  import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
  import com.xxl.job.admin.core.util.I18nUtil;
  import com.xxl.job.core.biz.ExecutorBiz;
  import com.xxl.job.core.biz.model.ReturnT;
  import com.xxl.job.core.biz.model.TriggerParam;
  
  import java.util.List;
  
  /**
   * Created by xuxueli on 17/3/10.
   */
  public class ExecutorRouteFailover extends ExecutorRouter {
  
  	@Override
  	public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
  
  		StringBuffer beatResultSB = new StringBuffer();
  		for (String address : addressList) {
  			// beat
  			ReturnT<String> beatResult = null;
  			try {
  				ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
  				beatResult = executorBiz.beat();
  			}
  			catch (Exception e) {
  				logger.error(e.getMessage(), e);
  				beatResult = new ReturnT<String>(ReturnT.FAIL_CODE, "" + e);
  			}
  			beatResultSB.append((beatResultSB.length() > 0) ? "<br><br>" : "")
  					.append(I18nUtil.getString("jobconf_beat") + "：").append("<br>address：").append(address)
  					.append("<br>code：").append(beatResult.getCode()).append("<br>msg：").append(beatResult.getMsg());
  
  			// beat success
  			if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
  
  				beatResult.setMsg(beatResultSB.toString());
  				beatResult.setContent(address);
  				return beatResult;
  			}
  		}
  		return new ReturnT<String>(ReturnT.FAIL_CODE, beatResultSB.toString());
  
  	}
  
  }
  