維護本地唯一標識

工作中用到了在本地記錄agent唯一標識的需求,實現方式如下:

public class AgentIdHelper {
    
    private static final Logger logger = LoggerFactory.getLogger(AgentIdHelper.class);
    
    /**
     * 監測本地是否有保存agentId的文件?
     * 若有,讀取並校驗其中的UUID
     * 若無,代碼中重新生成一個UUID,並保存到指定的目錄文件中
     * 保存該UUID的文件名和路徑固定
     */
    public static String checkLocalAgentId(String agentName) throws IOException {
        String agentId = null;
        File file = new File("./.".concat(agentName));
        if (!file.exists()) {
            logger.warn("no this file:{}, need to create!", agentName);
            if (!file.createNewFile()) {
                logger.error("Create new file fail!!!");
                throw new IOException("Create new file fail!!!");
            }
            logger.info("Create a new file:{} successfully...", file.getName());
            // 寫入UUID
            agentId = UUID.randomUUID().toString();
            logger.info("generate a new agentId:{}", agentId);
            try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
                bw.write(agentId);
            } catch (Exception e) {
                logger.error("Close BufferedWriter or FileWriter exception!!!", e);
            }
            logger.info("New agentId:{} write to file successfully...", agentId);
        } else {
            logger.info("File:{} has exist, start to read it...", file.getName());
            // 讀取文件內容
            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                String tmpAgentId;
                while ((tmpAgentId = br.readLine()) != null) {
                    logger.info("show agentId:{} which read from file...", tmpAgentId);
                    agentId = tmpAgentId;
                }
            } catch (Exception e) {
                logger.error("Close BufferedReader or FileReader exception!!!", e);
            }
        }
        return agentId;
    }
}

注:該方法使用uuid作爲唯一標識,並將生成的標識以字符串的形式保存在本地的隱藏文件中,每次程序啓動會先去本地讀取該文件,若無法讀取會重新生成一份

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章