1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有json格式的配置,我们暂不讨论
2.经历:先看图
(1)我之前以为直接在src创建system.properties然后
package cs.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; /** * * @author JJ * */ public class SetSystemProperty { //属性文件的路径 static String profilepath="src/system.properties"; /** * 采用静态方法 */ private static Properties props = new Properties(); static { try { props.load(new FileInputStream(profilepath)); } catch (FileNotFoundException e) { e.printStackTrace(); System.exit(-1); } catch (IOException e) { System.exit(-1); } } /** * 读取属性文件中相应键的值 * @param key * 主键 * @return String */ public static String getKeyValue(String key) { return props.getProperty(key); } }
(2)做个测试
package cs.util; public class test { public static void main(String[] args) { // TODO Auto-generated method stub SetSystemProperty property=new SetSystemProperty(); String name=property.getKeyValue("name"); System.out.println(name); } }
确实可以打印正确值,但是我部署到服务器(tomcat)里面就找不到配置文件路径,晕
3、解决方法
(1)配置文件不变暂放在src下面,修改类
package cs.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * * @author JJ * */ public class SetSystemProperty { static Properties props; public void GetDBConfigStr() { props = new Properties(); InputStream in; try{ in=this.getClass().getResourceAsStream("/system.properties"); props.load(in); } catch(Exception e) { System.out.print(e.getMessage()); return ; } if(props.isEmpty()) { return; } } public String getValueByKey(String key) { return props.get(key).toString(); } public SetSystemProperty() { super(); GetDBConfigStr(); } }
(2)在web项目中后台java的调用例子截图