在进行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);
这里推荐使用第二种方式