關於java加載數據庫配置文件db.properties中的一些問題
在日常項目開發中,爲方便項目後期維護,在建立連接池,連接數據庫時,一般都不會將數據庫的基本配置driverClassName,url,username,password等信息直接寫進DbUtils類中(建立數據庫連接的一個工具類),而是通過xxx.properties配置文件的形式進行配置,然後由DbUtils類加載並讀取該配置文件。該配置文件是以key-value的形式存放數據庫配置信息,如下代碼就是db.properties文件的基本形式;
#數據庫基本信息配置 driverClassName=org.postgresql.Driver url=jdbc:postgresql://127.0.0.1:5432/testdb username=postgres password=123456
#連接池性能配置 filters=stat initialSize=2 maxActive=300 maxWait=60000 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false poolPreparedStatements=false maxPoolPreparedStatementPerConnectionSize=200
|
加載db.properties文件的基本操作如下代碼所示:
//創建配置文件 private static Properties p = new Properties(); //加載配置文件並建立連接池 static{ try{ //FileInputStream in = new FileInputStream("src/pdb.properties"); (方式1,路徑爲絕對路徑) InputStream in = DbUtil.class.getResourceAsStream("/pdb.properties");(方式2,採用相對路徑) p.load(in); ds = DruidDataSourceFactory.createDataSource(p);//創建連接池 }catch(Exception e){ e.printStackTrace(); } } |
方式1,路徑爲絕對路徑:
FileInputStream in = new FileInputStream("src/pdb.properties");
方式2,採用相對路徑;
InputStream in = DbUtil.class.getResourceAsStream("/pdb.properties");
如果在java項目中使用方式1加載配置文件到不會有什麼問題,只要將配置文件放在src目錄下,項目編譯時,會將配置文件放到bin目錄中,運行時能找到配置文件的路徑,因爲在java項目中,classpath的根目錄就是bin目錄。
如果在java web項目中,使用方式1進行加載,就會在運行時出現問題,因爲在web項目中,classpath的根目錄是WEB-INF/classes,通過方式1加載配置文件時,路徑採用了絕對路徑,所以導致web項目在運行時tomcat容器找不到配置文件的路徑,所以會拋錯。此時最好的解決辦法就是使用方式2加載配置文件,通過反射找到配置文件的路徑。採用相對路徑不管在java項目還是java web項目,都是最佳的選擇。