此篇博客緣起:部署java web系統到阿里雲服務器(ubuntu14.04)的時候,有以下兩個問題
- 找不到自定義的property配置文件
- 上傳圖片的時候找不到路徑
開發的時候是在windows上的,運行正常,部署的時候就出問題了,肯定是windows和linux路徑區別導致的(一個小問題來回鼓搗了幾個小時,因為有自己對windows下和linux下的區別還不是特別了解,還有就是每次在windows下修改完成以后都要重新上傳到阿里雲,項目較大來回也需要較多時間。。。),遂決定好好看看java web路徑的問題。
普通java程序獲取路徑
Thread.currentThread().getContextClassLoader().getResource("/").toURI().getPath() null Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath() /D:/workspace/EPEducationManager/build/classes/ UserResource.class.getClassLoader().getResource("/").toURI().getPath() null UserResource.class.getClassLoader().getResource("").toURI().getPath() /D:/workspace/EPEducationManager/build/classes/ UserResource.class.getResource("").toURI().getPath() /D:/workspace/EPEducationManager/build/classes/com/phy/em/user/rest/ UserResource.class.getResource("/").toURI().getPath() /D:/workspace/EPEducationManager/build/classes/ System.getProperty("user.dir") D:\workspace\EPEducationManager
在java web中獲取路徑
Thread.currentThread().getContextClassLoader().getResource("/").toURI().getPath() /D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/EPEducationManager/WEB-INF/classes/ Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath() /C:/tomcat7/lib/ UserResource.class.getClassLoader().getResource("/").toURI().getPath() /D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/EPEducationManager/WEB-INF/classes/ UserResource.class.getClassLoader().getResource("").toURI().getPath() /C:/tomcat7/lib/ UserResource.class.getResource("").toURI().getPath() /D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/EPEducationManager/WEB-INF/classes/com/phy/em/user/rest/ UserResource.class.getResource("/").toURI().getPath() /C:/tomcat7/lib/ System.getProperty("user.dir") C:\Program Files (x86)\eclipse
根據上面的輸出選擇對應的獲取路徑的方法,特別注意獲取得到的path前面有"/",不要手賤刪除"/",對,我就是那個手賤的人,刪除了"/",因為看到前面有斜杠在windows資源管理器中是打不開的,我就刪除了,結果在windows上運行是正確的,但是部署在linux上的時候把"/"刪除了就成了"var/share/lib",明顯這個錄警示不正確的,本來是根目錄下var...成了當前目錄下var...
獲取路徑就可以讀取制定目錄下的配置文件了
使用spring讀取配置文件
在xml中讀取
<bean id=”propertyConfigurer” class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”> <property name=”location”> <value>/WEB-INF/configInfo.properties</value> </property> <property name=”fileEncoding” value=”utf-8″ /> </bean>
在xml中使用
<property name=”host”> <value>${email.host}</value> </property> <property name=”port”> <value>${email.port}</value> </property>
通過以上兩步就可以完成在讀取property配置文件並注入到對應的bean中,但是有時候我們並不需要為了讀取配置而創建一個bean,我們只想代碼中直接讀取配置文件,可以使用如下的方式
ResourceUtils.getFile("classpath:config.properties").getPath()
D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\EPEducationManager\WEB-INF\classes\
可以直接在代碼中使用"classpath"來定位配置文件,獲取得到的是一個File對象,當然了獲取路徑肯定沒問題
通過這次的填坑經歷又一次堅定了使用linux的信心和決心,以前多次使用linux的嘗試都失敗了,本着不pass(怕死)的心態又一次安裝了kali和linux mint雙系統(原來是windows和mint,把windows格了,把心愛的linux安裝在了心愛的SSD上),堅持着一個月來,感覺越來越得心應手