java获取config.properties中参数值的两种方法


在进行web开发时,经常会把一些通用的配置信息以k-v的形式放在config.properties中,比如:数据库信息,如下图:

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=dbcs
password=dbcs

然后在代码中加载config.properties这个配置文件,从中将定义的配置信息一个个取出来,这里介绍两种方法:

第一种:

    private static final String CONFIG_FILE_NAME = "config.properties";
    private static Properties p = new Properties();
    static String path = null;

    static {
        path = FtpConfiguration.class.getResource("/").getPath()
                + CONFIG_FILE_NAME;
        try {
            path = URLDecoder.decode(path, "utf-8");
            p.load(new FileInputStream(new File(path)));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 定义构造方法
     */
    // ftp服务器的ip地址
    public static String getIp() {
        return p.getProperty("ftpIp");
    }

如上,这种方法加载了配置文件,但是每一个定义的参数都需要写一个构造方法去获取,比如:ftpIp

第二种:

    private static Properties props;
    
    /*
     * 静态代码块加载  一次加载多次使用
     */
    static{
        loadProps();
    }
    
    private synchronized static void loadProps() {
        logger.info("开始加载properties文件内容... ...");
        props = new Properties();
        InputStream in = null;
        try {
            in = PropertyUtil.class.getResourceAsStream("/config.properties");
            props.load(in);
        } catch (FileNotFoundException e) {
            logger.error("config.properties文件未找到");
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        } finally {
            try {
                if(null != in) {
                    in.close();
                }
            } catch (IOException e) {
                logger.error("config.properties文件流关闭出现异常");
            }
        }
        logger.info("加载properties文件内容完成...........");
        logger.info("properties文件内容:" + props);
    }
    
    /**
     * 根据配置文件key获取配置参数值
     * @param key
     * @return
     */
    public static String getProperty(String key){
        if(null == props) {
            loadProps();
        }
        return props.getProperty(key);
    }

    public static String getProperty(String key, String defaultValue) {
        if(null == props) {
            loadProps();
        }
        return props.getProperty(key, defaultValue);
    }

这种方式是将方法定义成静态代码块,写一个统一的get方法,这样就不需要把config.propeties中每一个定义的参数都写一个构造方法去获取,只需要在用到的地方调用

统一的get方法即可,比如:

  private static final String WSDL = "rhzx.ws.url";
  
  String wsUrl = PropertyUtil.getProperty(WSDL);

这里推荐使用第二种方式

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM