package com.baidu.disconf.client.fetcher.impl; import java.io.File; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.baidu.disconf.client.fetcher.FetcherMgr; import com.baidu.disconf.core.common.constants.Constants; import com.baidu.disconf.core.common.json.ValueVo; import com.baidu.disconf.core.common.restful.RestfulMgr; import com.baidu.disconf.core.common.restful.core.RemoteUrl; import com.baidu.disconf.core.common.utils.OsUtil; /** * 抓取器, 独立模块,不依赖外部模块, 由Factory来管理此实例 * * @author liaoqiqi * @version 2014-7-29 */ public class FetcherMgrImpl implements FetcherMgr { protected static final Logger LOGGER = LoggerFactory.getLogger(FetcherMgrImpl.class); // 获取远程配置 重试次数 private int retryTime = 3; // 获取远程配置 重试时休眠时间 private int retrySleepSeconds = 5; // 下载的文件会被迁移到classpath根路径下 private boolean enableLocalDownloadDirInClassPath = true; // 下载文件夹, 远程文件下载后会放在这里 private String localDownloadDir; // temp 临时目录 private String localDownloadDirTemp; // private List<String> hostList = new ArrayList<String>(); // result tool private RestfulMgr restfulMgr = null; // // 创建对象 // public FetcherMgrImpl(RestfulMgr restfulMgr, int retryTime, int retrySleepSeconds, boolean enableLocalDownloadDirInClassPath, String localDownloadDir, String localDownloadDirTemp, List<String> hostList) { this.restfulMgr = restfulMgr; this.retrySleepSeconds = retrySleepSeconds; this.retryTime = retryTime; this.enableLocalDownloadDirInClassPath = enableLocalDownloadDirInClassPath; this.localDownloadDir = localDownloadDir; this.localDownloadDirTemp = localDownloadDirTemp; OsUtil.makeDirs(this.localDownloadDir); this.hostList = hostList; } /** * 根据 URL 从远程 获取Value值 */ public String getValueFromServer(String url) throws Exception { // 远程地址 RemoteUrl remoteUrl = new RemoteUrl(url, hostList); ValueVo confItemVo = restfulMgr.getJsonData(ValueVo.class, remoteUrl, retryTime, retrySleepSeconds); LOGGER.debug("remote server return: " + confItemVo.toString()); if (confItemVo.getStatus().equals(Constants.NOTOK)) { throw new Exception("status is not ok."); } return confItemVo.getValue(); } /** * 下载配置文件, remoteUrl是 url * * @throws Exception */ public String downloadFileFromServer(String url, String fileName, String targetFileDir) throws Exception { // 下载的路径 String localDir = getLocalDownloadDirPath(); // 设置远程地址 RemoteUrl remoteUrl = new RemoteUrl(url, hostList); // 下载 return restfulMgr .downloadFromServer(remoteUrl, fileName, localDir, localDownloadDirTemp, targetFileDir, enableLocalDownloadDirInClassPath, retryTime, retrySleepSeconds); } /** * 获取本地下载的路径DIR, 通过参数判断是否是临时路径 * * @throws Exception */ private String getLocalDownloadDirPath() throws Exception { String localUrl = localDownloadDir; if (!new File(localUrl).exists()) { new File(localUrl).mkdirs(); } return localUrl; } @Override public void release() { restfulMgr.close(); } }