簡體   English   中英

Java Servlet中的數據庫連接池

[英]Database Connection Pooling in Java Servlets

我正在使用以下方法創建用於Employee Management System的Web應用程序:Apache Tomcat作為HTTP Server,Oracle作為數據庫,Applet用於客戶端編程,而Servlets用於服務器端編程。 我還想使用DBCP來管理與數據庫的連接。

我希望執行查詢的servlet使用客戶端為連接輸入的用戶名和密碼。 但是到目前為止,我已經看到在context.xml配置資源時必須設置連接池的用戶名和密碼。

有什么方法可以實現並且仍然使用DBCP? 還是我必須為每個請求在doGet()doPost()打開連接?

如評論中所述,通常,限制邏輯是在應用程序端而不是數據庫端完成的。

但是,如果您真的想使用數據庫安全模型,則需要為每個登錄用戶創建單獨的數據源(ConnectionPool),並將其存儲在其會話中。 如果您有許多並發訪問權限,您很快就會發現資源用完了。

例如,我正在使用DataSource,因為它更易於配置,但是您可以只使用任何連接池實現。

在登錄操作中,創建新的數據源(例如,使用apache common: http : //commons.apache.org/proper/commons-dbcp/ ),然后將其插入會話中

BasicDataSource ds = new BasicDataSource();
...
ds.setPassword(userPassword);
ds.setUserName(login);
...

HttpSession session = request.getSession();
session.setAttribute("DBcon",ds);

並在您的其他獲取/帖子中:

HttpSession session = request.getSession();
DataSource ds = (DataSource)session.getAttribute("DBcon");

由於它將成為每個用戶一個數據源,因此請確保使用池的一些低參數,例如size = 3,因為它對於用戶來說應該足夠了。

DataSource::getConnection​(String username, String password)

DataSource接口有一個明確用於您的目的的方法:更改每個連接的名稱和密碼,同時使用所有其他先前設置的選項進行連接: DataSource::getConnection​(String username, String password)

java.sql.ConnectionPoolDataSource接口具有相同的方法getPooledConnection​(String user, String password) 因此,您的特定連接池實現可能支持此功能。

public javax.sql.DataSource obtainDataSource() {
    org.postgresql.ds.PGSimpleDataSource dataSource = new PGSimpleDataSource() ;
    dataSource("AcmeInvoices database data source") ;
    source.setServerName( "localhost" ) ;
    source.setDatabaseName( "invoicing" ) ;
    // source.setUser( "Scott" ) ;
    // source.setPassword( "tiger" ) ;
    return dataSource ;  // Returning a reference to the object of this concrete class `PGSimpleDataSource` as an object of the interface `DataSource`. 
}

在進行一些數據庫工作時:

Connection conn = myDataSource.getConnection( "Scott" , "tiger" ) ;
… run SQL
conn.close() ;  // Or better yet: Use try-with-resources syntax to automatically close the connection.

有關詳細討論,請參閱我的一個答案在一個相關的問題。

請參見有關DataSource Oracle 教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM