使用Properties类动态加载配置文件里的内容

例如读取配置文件,配置redis,

列出部分代码如下:

1.初始化对象:

public class RedisInst {
    public RedisInst() {
    }
    public static IMyRedis getInstance() {
        FileConf fileConf = FileConf.getInstance();//获取配置文件的内容
        RedisConfig config = new RedisConfig(); //redis配置集
        config.setCluster(fileConf.isCluster());
        config.setHost(fileConf.getHost());
        config.setPort(fileConf.getPort());
        config.setAuth(fileConf.getAuth());
        config.setDataBase(fileConf.getDataBase());
        config.setHoststr(fileConf.getHoststr());
        config.setMaxIdle(fileConf.getMaxIdle());
        config.setMinIdle(fileConf.getMinIdle());
        config.setTestOnBorrow(fileConf.isTestOnBorrow());
        config.setTimeout(fileConf.getTimeout());
        config.setMaxRedirections(fileConf.getMaxRedirections());
        config.setMaxWaitMillis(fileConf.getMaxWaitMillis());
        config.setMaxTotal(fileConf.getMaxTotal());
        config.setSoTimeout(fileConf.getSoTimeout());
        return RedisClient.getInstance(config);
    }
    static {
        FileConf.getInstance();
    }
}

2.单例模式构造

public class FileConf {
    public static Logger logger = Logger.getLogger(FileConf.class.getName());

    private static final String REDIS_IS_CLUSTER = "REDIS_IS_CLUSTER";
    private static final String REDIS_MAX_ACTIVE = "REDIS_MAX_ACTIVE";
    private static final String REDIS_MAX_IDLE = "REDIS_MAX_IDLE";
    private static final String REDIS_MIN_IDLE = "REDIS_MIN_IDLE";
    private static final String REDIS_TIMEOUT = "REDIS_TIMEOUT";
    private static final String REDIS_HOST = "REDIS_HOST";
    private static final String REDIS_PORT = "REDIS_PORT";
    private static final String REDIS_PWD = "REDIS_PWD";
    private static final String REDIS_DATABASE = "REDIS_DATABASE";
    private static final String REDIS_TESTONBORROW = "TESTONBORROW";
    private static final String REDIS_MAX_WAIT = "REDIS_MAX_WAIT";
    private static final String REDIS_HOST_LIST = "REDIS_HOST_LIST";
    private static final String REDIS_SOTIMEOUT = "REDIS_SOTIMEOUT";
    private static final String REDIS_MAX_REDIRECTIONS = "REDIS_MAX_REDIRECTIONS";


    private String REDIS_CONF_FILE = "redis_config.properties";
    private boolean isCluster = false;
    private int timeout = 5000;
    private int maxTotal = 5;
    private int maxIdle = 2;
    private String hoststr = "127.0.0.1:6379";
    private int soTimeout = 5000;
    private int maxRedirections = 6;
    private int minIdle = 10;
    private String host = "127.0.0.1";
    private String auth;
    private long maxWaitMillis = 10000L;
    private int port = 6379;
    private int dataBase = 0;
    private static final Object initLock = new Object();
    private static volatile FileConf instance = null;
    private boolean testOnBorrow = false;

    private FileConf() {
        this.loadProperties();
    }

    public static FileConf getInstance() {
        if (null == instance) {
            Object var0 = initLock;
            synchronized(initLock) {
                if (null == instance) {
                    instance = new FileConf();
                }
            }
        }
        return instance;
    }

    public void reloadProperties(String confFileName) {
        this.REDIS_CONF_FILE = confFileName;
        this.loadProperties();
    }

    private void loadProperties() {
        Object stream = null;
        try {
            File f = new File(System.getProperty("user.dir") + File.separator + this.REDIS_CONF_FILE);
            if (f.exists()) {
                stream = new BufferedInputStream(new FileInputStream(f));
            } else {
                stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(this.REDIS_CONF_FILE);
            }
            Properties props = new Properties();
            props.load((InputStream)stream);
            this.maxTotal = Integer.parseInt(props.getProperty("REDIS_MAX_ACTIVE", "" + this.maxTotal).trim());
            this.maxIdle = Integer.parseInt(props.getProperty("REDIS_MAX_IDLE", "" + this.maxIdle).trim());
            this.minIdle = Integer.parseInt(props.getProperty("REDIS_MIN_IDLE", "" + this.minIdle).trim());
            this.maxWaitMillis = (long)Integer.parseInt(props.getProperty("REDIS_MAX_WAIT", "" + this.maxWaitMillis).trim());
            this.timeout = Integer.parseInt(props.getProperty("REDIS_TIMEOUT", "" + this.timeout).trim());
            this.host = props.getProperty("REDIS_HOST", "Cluster").trim();
            String[] ipport = this.host.split(":");
            if (ipport != null && ipport.length > 1) {
                this.host = ipport[0];
                this.port = Integer.parseInt(ipport[1]);
            } else {
                this.port = Integer.parseInt(props.getProperty("REDIS_PORT", "" + this.port).trim());
            }
            this.auth = props.getProperty("REDIS_PWD");
            this.isCluster = Integer.parseInt(props.getProperty("REDIS_IS_CLUSTER", "1").trim()) == 1;
            this.hoststr = props.getProperty("REDIS_HOST_LIST", "Cluster").trim();
            this.soTimeout = Integer.parseInt(props.getProperty("REDIS_SOTIMEOUT", "" + this.soTimeout).trim());
            this.maxRedirections = Integer.parseInt(props.getProperty("REDIS_MAX_REDIRECTIONS", "" + this.maxRedirections).trim());
            this.dataBase = Integer.parseInt(props.getProperty("REDIS_DATABASE", "" + this.dataBase).trim());

        } catch (Exception var12) {
            throw new RuntimeException(var12);
        } finally {
            if (null != stream) {
                try {
                    ((InputStream)stream).close();
                } catch (IOException var11) {
                    ;
                }
            }
        }
    }

    public boolean isCluster() {
        return isCluster;
    }

    public void setCluster(boolean cluster) {
        isCluster = cluster;
    }

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public int getMaxTotal() {
        return maxTotal;
    }

    public void setMaxTotal(int maxTotal) {
        this.maxTotal = maxTotal;
    }

    public int getMaxIdle() {
        return maxIdle;
    }

    public void setMaxIdle(int maxIdle) {
        this.maxIdle = maxIdle;
    }

    public String getHoststr() {
        return hoststr;
    }

    public void setHoststr(String hoststr) {
        this.hoststr = hoststr;
    }

    public int getSoTimeout() {
        return soTimeout;
    }

    public void setSoTimeout(int soTimeout) {
        this.soTimeout = soTimeout;
    }

    public int getMaxRedirections() {
        return maxRedirections;
    }

    public void setMaxRedirections(int maxRedirections) {
        this.maxRedirections = maxRedirections;
    }

    public int getMinIdle() {
        return minIdle;
    }

    public void setMinIdle(int minIdle) {
        this.minIdle = minIdle;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getAuth() {
        return auth;
    }

    public void setAuth(String auth) {
        this.auth = auth;
    }

    public long getMaxWaitMillis() {
        return maxWaitMillis;
    }

    public void setMaxWaitMillis(long maxWaitMillis) {
        this.maxWaitMillis = maxWaitMillis;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public int getDataBase() {
        return dataBase;
    }

    public void setDataBase(int dataBase) {
        this.dataBase = dataBase;
    }

    public boolean isTestOnBorrow() {
        return testOnBorrow;
    }

    public void setTestOnBorrow(boolean testOnBorrow) {
        this.testOnBorrow = testOnBorrow;
    }
}
原文地址:https://www.cnblogs.com/zyanrong/p/12738555.html