BEA WebLogic是重量級J2EE應用服務器,集成開發工具與運行時環境。本文記錄在WebLogic Workshop中創建域、構建Web應用、配置JSP連接數據庫的完整流程(含db.properties外部化配置、連接管理類),並針對WebLogic高內存佔用給出優化建議。
Basic WebLogic Workshop Domain(包含Workshop、Portal、Integration服務器模板)。https://localhost:7001/console。AppName/WebModule/WEB-INF/AppName/WebModule/index.jspAppName/WebModule/error.jspAppName/WebModule/db.propertiesAppName/WebModule/javacls/clsDb.javadb.properties)drivers=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@192.168.1.100:1521:orcl
user=scott
password=tiger
clsDb.java)package javabean;
import java.sql.*;
import java.util.Properties;
public class clsDb {
private Connection cn = null;
private Statement sqlstm = null;
private ResultSet rs = null;
public boolean openConnection() {
Properties prop = new Properties();
try {
// 關鍵:getResourceAsStream從類路徑加載同目錄下配置文件
java.io.InputStream in = this.getClass().getResourceAsStream("../db.properties");
prop.load(in);
if (in != null) in.close();
} catch (java.io.IOException e) {
System.out.println("[OpenCn] 配置文件打開錯誤!");
return false;
}
String driver = prop.getProperty("drivers");
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println("[OpenCn] 裝載JDBC驅動出錯!");
return false;
}
try {
this.cn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public ResultSet exeQuery(String sql) throws SQLException {
this.sqlstm = cn.createStatement();
return this.sqlstm.executeQuery(sql);
}
public int exeUpdate(String sql) throws SQLException {
this.sqlstm = cn.createStatement();
return this.sqlstm.executeUpdate(sql);
}
public void close() {
try { if (rs != null) rs.close(); } catch (SQLException ignored) {}
try { if (sqlstm != null) sqlstm.close(); } catch (SQLException ignored) {}
try { if (cn != null) cn.close(); } catch (SQLException ignored) {}
}
}
<%@ page import="java.sql.*, javabean.clsDb" %>
<html><body>
<%
javabean.clsDb db = new javabean.clsDb();
if (db.openConnection()) {
ResultSet rs = db.exeQuery("SELECT d FROM test");
while (rs.next()) {
out.println(rs.getObject(1) + "<br>");
}
db.close();
}
%>
</body></html>
error.jsp)<%@ page isErrorPage="true" %>
<p>發生錯誤<br>
錯誤描述:<%= exception.toString() %><br>
錯誤原因:<%= exception.getMessage() %>
</p>
正常頁面指令:<%@ page errorPage="error.jsp" %>。
| 問題 | 優化措施 |
|---|---|
| 啟動內存佔用極大(≥512MB) | 啟動參數-Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m(JDK 7-)或-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m(JDK 8+) |
| EJB/ JMS/ JCA等默認服務佔用資源 | 控制台禁用不需要的服務模塊,精簡域配置 |
| JDBC連接池管理 | 控制台創建JDBC Connection Pool → Data Source → JNDI名jdbc/myDS,JSP通過new InitialContext().lookup("jdbc/myDS")獲取,避免代碼直連 |
| 熱部署/開發模式類加載器洩漏 | 生產模式production-mode-enabled=true,禁用自動部署 |
| 垃圾回收停頓 | JDK 8+ 使用-XX:+UseG1GC -XX:MaxGCPauseMillis=200;大堆考慮ZGC/Shenandoah |