簡體   English   中英

為Web應用程序獲取DBConnection的正確方法

[英]Proper way of obtaining the DBConnection for a Web Application

我們有一個Web應用程序,它將為1000多個並發用戶提供服務。當前,用於獲取DB連接的Utility類是

public static Connection getDBConnection()
       {
          Connection conn = null;
          try
          {
             InitialContext ctx = new InitialContext();
             DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/MyLocalDB");
             try
             {
                conn = ds.getConnection();
             }
             catch ( SQLException sqlEx )
             {
                System.out.println( "cannot get JDBC connection: " + sqlEx ); 
             }
          }
          catch ( NamingException nEx )
          {
             nEx.printStackTrace();
          }
          return conn;
       }

選項2:

 public class DBConnection2 {
    private static DataSource dataSource;
    static {
        try {
              dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/MyLocalDB");
        } catch (NamingException e) {
            try {
                throw new Exception("'jndifordbconc' not found in JNDI",e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }

    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }

    }

}

請讓我知道更好的選擇是什么(我想它的第二個操作是查找,因為它是一項昂貴的操作,而我在應用程序中只能執行一次。)

請分享您的看法。

在第二種方法上,您應該確保使用連接池。 否則,用戶將不得不等待其他人。

例如,To Tomcat帶來了自己的連接池。 或者,如果您不使用Tomcat,則可以看看C3p0:JDBC DataSources / Resource Pools

請參閱: 實例化和配置ComboPooledDataSource

您應該采用第二種方法。 如您所說,您無需一直在JNDI中查找數據源。

我假設您使用的是tomcat-jdbc項目提供的池化數據源,否則性能將很糟糕。

第二個選項僅在加載類時初始化dataSource一次,然后在所有DBConnection2實例之間共享它。 每次調用getDBConnection()時,第一個選項都會初始化一個新的DataSource實例。 因此,第二種選擇具有更好的性能。 但是請注意連接釋放問題。 如果選擇第一個選項,請確保關閉連接。 我更喜歡使用框架來處理數據庫連接,例如Spring JDBChttp : //docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

暫無
暫無

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

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