開發階段常用解壓目錄部署,上線卻打包成 .war。WebLogic 不自動解壓 WAR,導致 ServletContext.getRealPath("/") 返回 null,原本用文件 IO 讀取 WEB-INF/log4j.properties 的代碼瞬間失效。
// 開發環境正常,打包部署失敗
String path = context.getRealPath("/") + "/WEB-INF/log4j.properties";
PropertyConfigurator.configure(path);
getResourceAsStreamInputStream is = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(is);
PropertyConfigurator.configure(props);
getResourceAsStream 兼容文件系統、JAR/WAR、資料庫等多種資源來源,無論打包與否皆可用,徹底消除環境差異。
OutOfMemoryError類文件數千時,JVM 預設 64MB 堆內存不夠用。修改 ant.bat(或 ant.sh)的啟動參數:
:runAnt
"%_JAVACMD%" -Xms128m -Xmx512m -classpath ...
若用 Jike 編譯器,同步修改 :runAntWithJikes 區塊。-Xms 設初始堆、-Xmx 設最大堆,視物理內存調整,通用於所有 Java 應用啟動腳本。