連接池是創建和管理一個連接的緩衝池的技術,這些連接準備好被任何需要它們的線程使用 .
一個線程需要用 JDBC 對一個 GBase 或其它數據庫操作時,它從池中請求一個連接。當這個線程使用完了這個連接,將它返回到連接池中,這樣這就可以被其它想使用它的線程使用。 當連接從池中“借出”,它被請求它的線程專有地使用。從編程的角度來看,這和用戶的線程每當需要一個 JDBC 連接的時候調用DriverManager.getConnection() 是一樣的,採用連接池結束,可通過使用新的或已有的連接結束線程。 連接池可以極大的改善用戶的 Java 應用程序的性能,同時減少全部資源的使用。連接池主要的優點有:
減少連接創建時間
雖然與其它數據庫相比 GBase 提供了較爲快速連接功能,但是創建新的 JDBC 連接仍會招致網絡和 JDBC 驅動的開銷。如果這類連接是“循環”使用的,使用該方式這些花銷就可避免。
簡化的編程模式
當使用連接池時,每一個單獨的線程能夠像創建了一個自己的 JDBC 連接一樣操作,允許用戶直接使用JDBC編程技術。
受控的資源使用
如果用戶不使用連接池,而是每當線程需要時創建一個新的連接,那麼用戶的應用程序的資源使用會產生非常大的浪費並且可能會導致高負載下的異常發生。
Tomcat連接池的配置和使用,數據庫爲sqlserver2008,注意tomcat要6.0以上。
1、將數據庫驅動導入到tomcat的lib中。
2、在myeclipse web工程的META-INF中創建配置文件context.xml,其內容如下
- <?xml version="1.0" encoding="UTF-8"?>
- <Context reloadable="true" crossContext="true">
- <!-- Default set of monitored resources -->
- <WatchedResource>WEB-INF/web.xml</WatchedResource>
- <!-- Uncomment this to disable session persistence across Tomcat restarts -->
- <!--
- <Manager pathname="" />
- -->
- <Resource
- name="jspjdbc/myDataSource" 名稱,通常取”jdbc/XXX”的格式
- auth="Container"
- type="javax.sql.DataSource" 數據源類別
- driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 驅動名稱
- url="jdbc:sqlserver://localhost:1433;DataBaseName=JpetStore"
- username="sa" 用戶名
- password="123" 密碼
- maxActive="100" 最大活動的連接。
- maxIdle="30" 最大處於空閒的連接數
- maxWait="1000"/> 最長等待獲得連接的時間
- </Context>
4、進過上面的配置就可以在servlet中使用連接池了。簡單的寫了個
- import java.sql.Connection;
- import java.sql.SQLException;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import javax.sql.DataSource;
- public class DBUtil {
- private DBUtil(){}
- private static DBUtil dbutil;
- public static synchronized DBsUtil getInstance()
- {
- if (null == dbutil) {
- dbutil = new DBUtil();
- }
- return dbutil;
- }
- public Connection getConnection()
- {
- DataSource ds = null;
- Connection con = null;
- Context ctx = null;
- try {
- ctx = new InitialContext();
- } catch (NamingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- if(ctx!=null){
- try {
- ds = (DataSource)ctx.lookup("java:comp/env/jspjdbc/myDataSource");
- } catch (NamingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- con = ds.getConnection();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return con;
- }
- }