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的呼叫例子截圖