package com.embracesource.config; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Properties; import org.I0Itec.zkclient.ZkClient; import org.apache.commons.io.FileUtils; /** * zk配置文件下载类 * @author june * */ public class ZkConfigSaver { public static final String CONF_ENCODING = "UTF-8"; public static String ZK_CONFIG_ROOTNODE = "/zkSample/conf"; public static String ZK_CONF_ENCODING = "UTF-8"; public static int ZK_TIMEOUT = 30000; public static String ZK_ADDRESS = ""; private static final void loadProperties() { InputStream is = ZkConfigPublisher.class .getResourceAsStream("/zkpublisher.properties"); if (is == null) { throw new RuntimeException("找不到config.properties资源文件."); } Properties props = new Properties(); try { props.load(new BufferedReader(new InputStreamReader(is, "UTF-8"))); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } ZK_CONFIG_ROOTNODE = props.getProperty("ZK_CONFIG_ROOTNODE"); ZK_CONF_ENCODING = props.getProperty("ZK_CONF_ENCODING"); ZK_TIMEOUT = Integer.parseInt(props.getProperty("ZK_TIMEOUT")); ZK_ADDRESS = props.getProperty("ZK_ADDRESS"); } public static void main(String[] args) { if ((args == null) || (args.length < 1)) { throw new RuntimeException("需要指定输出目录名"); } loadProperties(); ZkClient client = new ZkClient(ZK_ADDRESS, ZK_TIMEOUT); client.setZkSerializer(new ZkUtils.StringSerializer(ZK_CONF_ENCODING)); File confDir = new File(args[0]); confDir.mkdirs(); saveConfigs(client, ZK_CONFIG_ROOTNODE, confDir); } private static void saveConfigs(ZkClient client, String rootNode, File confDir) { List<String> configs = client.getChildren(rootNode); for (String config : configs) { String content = (String) client.readData(rootNode + "/" + config); File confFile = new File(confDir, config); try { FileUtils.writeStringToFile(confFile, content, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } System.out.println("配置成功保存到本地: " + confFile.getAbsolutePath()); } } }