2
我有一個主要的Servlet來處理post/get請求。
我使用連接池(在GlassFish v3的JDBC/MySQL的),我的servlet代碼是:
傳遞jdbc數據源v/s傳遞Connection對象 - 從servlet到java類
public class Controller extends HttpServlet {
private DataSource datasource;
@Override
public void init() throws ServletException {
super.init();
try {
//Database Connection pooling:
InitialContext ctx = new InitialContext();
datasource = (DataSource)ctx.lookup("jdbc/MySQLPool");
}
catch (Exception e) {
e.printStackTrace();
}
}
private Connection getConnection() throws SQLException {
return datasource.getConnection();
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection connection=null;
try {
connection = datasource.getConnection();
Object obj= cmdFactory.getInstance().getCommand(Cmd).execute(connection);
}
等...並在一個servlet的結束終於阻止我關閉連接
所以現在我在最後一行傳遞「connection」對象作爲參數,供其他(非servlet)java類通過應用程序的低層使用。這是錯的嗎?是不是更好地傳遞數據源對象(然後在特定的類中執行datasource.getConnection())?或者是否有類似的「getServletContext()。getAttr(database)」可用於其他java類來獲得此連接?
非常感謝:)而且是關於泄漏你是絕對正確的,謝謝你提醒我,因爲我已經忘記了它! – shadesco
一個問題:你如何近似或計算,特定的Web應用程序的連接池大小應該是多少?是否有如下參考?這是我第一次使用連接池,我剛剛使用了glassfish的默認參數 – shadesco
我依賴於併發用戶的數量,數據庫實際支持的連接數以及線程池中的線程數。您必須使用預期的併發用戶數來加載測試您的應用,並查看最佳數字是什麼。然後你必須驗證現實是否符合你的期望。 –