<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在多線程里面,創建線程是一個昂貴的操作,如果有大量的小任務需要執行,并且頻繁地創建和銷毀線程,實際上會消耗大量的系統資源,往往創建和消耗線程所耗費的時間比執行任務的時間還長,所以,為了提高效率,可以用線程池。 類似的,在執行JDBC的增刪改查的操作時,如果每一次操作都來一次打開連接,操作,關閉連接,那么創建和銷毀JDBC連接的開銷就太大了。為了避免頻繁地創建和銷毀JDBC連接,我們可以通過連接池(Connection Pool)復用已經創建好的連接。 JDBC連接池有一個標準的接口`javax.sql.DataSource`,注意這個類位于Java標準庫中,但僅僅是接口。要使用JDBC連接池,我們必須選擇一個JDBC連接池的實現。常用的JDBC連接池有: * HikariCP * C3P0 * BoneCP * Druid 目前使用最廣泛的是HikariCP。我們以HikariCP為例,要使用JDBC連接池,先添加HikariCP的依賴如下: ~~~ <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>2.7.1</version> </dependency> ~~~ 緊接著,我們需要創建一個`DataSource`實例,這個實例就是連接池: ~~~ HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("password"); config.addDataSourceProperty("connectionTimeout", "1000"); // 連接超時:1秒 config.addDataSourceProperty("idleTimeout", "60000"); // 空閑超時:60秒 config.addDataSourceProperty("maximumPoolSize", "10"); // 最大連接數:10 DataSource ds = new HikariDataSource(config); ~~~ 注意創建`DataSource`也是一個非常昂貴的操作,所以通常`DataSource`實例總是作為一個全局變量存儲,并貫穿整個應用程序的生命周期。 有了連接池以后,我們如何使用它呢?和前面的代碼類似,只是獲取`Connection`時,把`DriverManage.getConnection()`改為`ds.getConnection()`: ~~~ try (Connection conn = ds.getConnection()) { // 在此獲取連接 ... } // 在此“關閉”連接 ~~~ 通過連接池獲取連接時,并不需要指定JDBC的相關URL、用戶名、口令等信息,因為這些信息已經存儲在連接池內部了(創建`HikariDataSource`時傳入的`HikariConfig`持有這些信息)。一開始,連接池內部并沒有連接,所以,第一次調用`ds.getConnection()`,會迫使連接池內部先創建一個`Connection`,再返回給客戶端使用。當我們調用`conn.close()`方法時(`在try(resource){...}`結束處),不是真正“關閉”連接,而是釋放到連接池中,以便下次獲取連接時能直接返回。 因此,連接池內部維護了若干個`Connection`實例,如果調用`ds.getConnection()`,就選擇一個空閑連接,并標記它為“正在使用”然后返回,如果對`Connection`調用`close()`,那么就把連接再次標記為“空閑”從而等待下次調用。這樣一來,我們就通過連接池維護了少量連接,但可以頻繁地執行大量的SQL語句。 通常連接池提供了大量的參數可以配置,例如,維護的最小、最大活動連接數,指定一個連接在空閑一段時間后自動關閉等,需要根據應用程序的負載合理地配置這些參數。此外,大多數連接池都提供了詳細的實時狀態以便進行監控。 ### 小結 數據庫連接池是一種復用`Connection`的組件,它可以避免反復創建新連接,提高JDBC代碼的運行效率; 可以配置連接池的詳細參數并監控連接池。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看