关于java:动态读取springboot配置文件

37次阅读

共计 1997 个字符,预计需要花费 5 分钟才能阅读完成。


import org.springframework.context.annotation.Profile;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * 形容:配置文件工具类
 *
 * @author pengjie_yao
 * @date 2019/9/9 15:16
 */
public class PropertiesUtils {



    /**
     * 传递键值对的 Map,更新 properties 文件
     * @param fileName 文件名 (放在 resource 源包目录下),须要后缀
     * @param keyValueMap 键值对 Map
     */
    public static void updateProperties(String fileName, Map<String, String> keyValueMap) throws Exception {
        // 获取文件门路
        String filePath = Profile.class.getClassLoader().getResource(fileName).toURI().getPath();
        System.out.println("propertiesPath:" + filePath);
        Properties props = new Properties();
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            // 从输出流中读取属性列表(键和元素对)br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
            props.load(br);
            br.close();
            // 写入属性文件
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)));
            // 清空旧的文件
            // props.clear();
            for (String key : keyValueMap.keySet()) {props.setProperty(key, keyValueMap.get(key));
                System.out.println("配置文件中要进行批改的 key 为:"+key);
                System.out.println("批改后的数据为:"+keyValueMap.get(key));
            }
            props.store(bw, "扭转数据");
            bw.close();} catch (IOException e) {e.printStackTrace();
            System.err.println("Visit" + filePath + "for updating" + ""+" value error");
        } finally {
            try {br.close();
                bw.close();} catch (IOException e) {e.printStackTrace();
            }
        }
    }

    /**
     * @Title: getProfileByClassLoader
     * @Description: 采纳 ClassLoader(类加载器) 形式进行读取配置信息
     * @return Map<String,Object> 以 Map 键值对形式返回配置文件内容
     * @param fileName 配置文件名称
     * 长处:能够在非 Web 利用中读取配置资源信息,能够读取任意的资源文件信息
     * 毛病:只能加载类 classes 上面的资源文件
     */
    public static Map<String, Object> getProfileByClassLoader(String fileName) {
        // 通过 ClassLoader 获取到文件输出流对象
        InputStream in = Profile.class.getClassLoader().getResourceAsStream(fileName);
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        Properties props = new Properties();
        Map<String, Object> profileMap = new HashMap<String, Object>();
        try {props.load(reader);
            for (Object key : props.keySet()) {profileMap.put(key.toString(), props.getProperty(key.toString()));
            }
        } catch (IOException e) {e.printStackTrace();
        }
        return profileMap;
    }

}

参考链接:
https://github.com/f763180872…

正文完
 0