最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java數(shù)據(jù)庫連接池

 更新時(shí)間:2021年06月08日 10:36:24   作者:香菜聊游戲  
今天繼續(xù)Java的課題,兩天沒有做任何事情,過了個(gè)自在的周末,但是不知道為什么總是有點(diǎn)淡淡的憂桑.之前游戲服務(wù)器的數(shù)據(jù)源使用的是阿里巴巴的Druid,今天就大概說說數(shù)據(jù)源,給個(gè)實(shí)例,需要的朋友可以參考下

一、什么是數(shù)據(jù)庫連接池

就是一個(gè)容器持有多個(gè)數(shù)據(jù)庫連接,當(dāng)程序需要操作數(shù)據(jù)庫的時(shí)候直接從池中取出連接,使用完之后再還回去,和線程池一個(gè)道理。

二、為什么需要連接池,好處是什么?

1.節(jié)省資源,如果每次訪問數(shù)據(jù)庫都創(chuàng)建新的連接,創(chuàng)建和銷毀都浪費(fèi)系統(tǒng)資源

2.響應(yīng)性更好,省去了創(chuàng)建的時(shí)間,響應(yīng)性更好。

3.統(tǒng)一管理數(shù)據(jù)庫連接,避免因?yàn)闃I(yè)務(wù)的膨脹導(dǎo)致數(shù)據(jù)庫連接的無限增多。

4.便于監(jiān)控。

三、都有哪些連接池方案

數(shù)據(jù)庫連接池的方案有不少,我接觸過的連接池方案有:

1.C3p0

這個(gè)連接池我很久之前看到過,但是當(dāng)時(shí)自己還很弱小,并沒有很好的理解,現(xiàn)在用的也很少了,爺爺級的連接池,可以忽略

2.DBCP (Database Connection Pool)

這個(gè)名字很直白,數(shù)據(jù)庫連接池,從Tomcat 5.5開始,Tomcat 內(nèi)置了DBCP的數(shù)據(jù)源實(shí)現(xiàn),所以可以非常方便地配置DBCP數(shù)據(jù)源。

3.Druid

阿里開源的數(shù)據(jù)源,這個(gè)也是前公司使用的數(shù)據(jù)源,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,強(qiáng)項(xiàng)在于監(jiān)控。

4.HiKariCP

號稱最快的數(shù)據(jù)庫連接池,springboot2.0 也已經(jīng)把默認(rèn)的數(shù)據(jù)源改為了HikariCP,強(qiáng)于性能。

四、連接池需要關(guān)注的參數(shù)

看下Druid 的數(shù)據(jù)庫連接池的配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="initialSize" value="5"/>
<property name="maxIdle" value="10"/>
<property name="minIdle" value="5"/>
<property name="maxActive" value="15"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="180"/>
<property name="maxWait" value="3000"/>
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

1.driverClassName 使用的JDBC驅(qū)動的完整有效的Java類名,如連接 mysql  com.mysql.cj.jdbc.Driver

2.jdbcUrl 數(shù)據(jù)庫的連接。如 jdbc:mysql://127.0.0.1:3306/mydatabase

3.username 你懂的,數(shù)據(jù)庫的用戶名,如 root

4.password 太直白了 ,數(shù)據(jù)庫的用戶密碼,如 p123456

5.initialSize 連接池創(chuàng)建的時(shí)候,自動創(chuàng)建的數(shù)據(jù)庫連接數(shù)量,建議 10-50足夠

6.maxIdle 最大空閑連接:連接池中允許保持空閑狀態(tài)的最大連接數(shù)量,超過的空閑連接將被釋放,如果設(shè)置為負(fù)數(shù)表示不限制,建議設(shè)置和 與initialSize相同,減少釋放和創(chuàng)建的性能損耗。

7.minIdle  最小空閑連接:連接池中容許保持空閑狀態(tài)的最小連接數(shù)量,低于這個(gè)數(shù)量將創(chuàng)建新的連接,如果設(shè)置為0則不創(chuàng)建

8.maxActive 最大同時(shí)激活的連接數(shù)量。

9.maxWait 如果連接池中沒有可用的連接,最大的等待時(shí)間,超時(shí)則沒有可用連接,單位毫秒,設(shè)置-1時(shí)表示無限等待,建議設(shè)置為100毫秒

10.testxxx  在對連接進(jìn)行操作時(shí),是否檢測連接的有效性,如 testOnBorrow 在申請連接的時(shí)候會先檢測連接的有效性,執(zhí)行validationQuery ,建議線上的把此配置設(shè)置為false,因?yàn)闀绊懶阅堋?/p>

11.validationQuery 檢查池中的連接是否仍可用的 SQL 語句,drui會連接到數(shù)據(jù)庫執(zhí)行該SQL, 如果正常返回,則表示連接可用,否則表示連接不可用,建議 select 1 from dual

五、怎么創(chuàng)建連接池,show me the code

5.1 pom.xml 加入依賴

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.2.6</version>
   </dependency>

5.2 配置文件

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!-- 基本屬性 url、user、password -->
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${jdbc_user}" />
    <property name="password" value="${jdbc_password}" />
 
    <!-- 配置監(jiān)控統(tǒng)計(jì)攔截的filters -->
    <property name="filters" value="stat" />
 
    <!-- 配置初始化大小、最小、最大 -->
    <property name="maxActive" value="20" />
    <property name="initialSize" value="1" />
    <property name="minIdle" value="1" />
 
    <!-- 配置獲取連接等待超時(shí)的時(shí)間 -->
    <property name="maxWait" value="60000" />    
 
    <!-- 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
 
    <!-- 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />
 
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
 
    <!-- 打開PSCache,并且指定每個(gè)連接上PSCache的大小 -->
    <property name="poolPreparedStatements" value="true" />
    <property name="maxOpenPreparedStatements" value="20" />
</bean>
 
<!--配置jdbcTemplate,如果userDao沒有extends JdbcDaoSupport-->
<<bean id="jdbcTemplate" class="com.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"/>
   </bean>
    <bean id="userDao" class="com.caraway.dao.UserDao">
       <property name="dataSource" ref="jdbcTemplate"/>
   </bean>

5.3 調(diào)用

public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao userDao = (UserDao) context.getBean("userDao");
       User user = new User();
       user.setUsername("香菜");
       user.setPassowrd("root");
       userDao.saveUser(user);
  }

六、總結(jié)

連接池和線程池的道理是一樣的,池化資源,降低生成和銷毀的損耗,提高系統(tǒng)的響應(yīng)。

今天的重點(diǎn)還是要理解線程池的原理,并且記住大部分的配置參數(shù),各個(gè)線程池雖然實(shí)現(xiàn)的細(xì)節(jié)不同,但是道理是相通的,掌握一個(gè)就掌握了所有,舉一反三。

到此這篇關(guān)于詳解Java數(shù)據(jù)庫連接池的文章就介紹到這了,更多相關(guān)數(shù)據(jù)庫連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java順序表實(shí)現(xiàn)圖書管理系統(tǒng)

    Java順序表實(shí)現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java順序表實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Mybatis3 if判斷字符串變態(tài)寫法

    Mybatis3 if判斷字符串變態(tài)寫法

    這篇文章主要介紹了Mybatis3 if判斷字符串變態(tài)的寫法,非常不錯,具有參考借鑒價(jià)值,需要的朋友參考下
    2017-01-01
  • 阿里四面之Spring Exception的原理解析

    阿里四面之Spring Exception的原理解析

    本文給大家介紹阿里四面之Spring Exception的原理解析,本文通過錯誤場景分析給大家詳細(xì)介紹Spring異常處理流程,感興趣的朋友一起看看吧
    2021-10-10
  • 使用JAVA實(shí)現(xiàn)郵件發(fā)送功能的圖文教程

    使用JAVA實(shí)現(xiàn)郵件發(fā)送功能的圖文教程

    郵件發(fā)送其實(shí)是一個(gè)非常常見的需求,用戶注冊,找回密碼等地方,都會用到,下面這篇文章主要給大家介紹了關(guān)于使用JAVA實(shí)現(xiàn)郵件發(fā)送功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • javaweb項(xiàng)目如何實(shí)現(xiàn)手機(jī)短信登錄

    javaweb項(xiàng)目如何實(shí)現(xiàn)手機(jī)短信登錄

    這篇文章主要介紹了javaweb項(xiàng)目如何實(shí)現(xiàn)手機(jī)短信登錄,手機(jī)號登錄在現(xiàn)在的項(xiàng)目中用的場景非常多,實(shí)現(xiàn)起來也不難,今天我們就一起來通過演示實(shí)現(xiàn)登錄過程,需要的朋友可以參考下
    2019-07-07
  • Java Ehcache緩存框架入門級使用實(shí)例

    Java Ehcache緩存框架入門級使用實(shí)例

    這篇文章主要介紹了Java Ehcache緩存框架入門級使用實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • 如何配置Eclipse實(shí)現(xiàn)定制登錄界面

    如何配置Eclipse實(shí)現(xiàn)定制登錄界面

    本文介紹了如何配置Eclipse實(shí)現(xiàn)定制登錄界面,每一步的講解都很細(xì)致,感興趣的小伙伴可以閱讀一下
    2015-07-07
  • java關(guān)于Date日期類型的大小比較

    java關(guān)于Date日期類型的大小比較

    這篇文章主要介紹了java關(guān)于Date日期類型的大小比較,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java 中Map 的用法詳解

    Java 中Map 的用法詳解

    本文主要介紹java 中的Map 接口, 這里對Map 接口下的幾個(gè)類做了詳細(xì)介紹,希望對學(xué)習(xí)java 編程的小伙伴有所幫助
    2016-07-07
  • SpringBoot利用ThreadPoolTaskExecutor批量插入百萬級數(shù)據(jù)

    SpringBoot利用ThreadPoolTaskExecutor批量插入百萬級數(shù)據(jù)

    在處理大量數(shù)據(jù)時(shí),為了提高效率和性能,通常需要采用批量插入的方式,本文主要介紹了SpringBoot利用ThreadPoolTaskExecutor批量插入百萬級數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評論

廊坊市| 临沭县| 寿宁县| 金塔县| 通河县| 原平市| 游戏| 娄底市| 邓州市| 怀化市| 兴业县| 永仁县| 江口县| 汝城县| 滨海县| 阿城市| 康乐县| 安阳市| 西贡区| 公安县| 牡丹江市| 全椒县| 丰县| 通辽市| 弋阳县| 九台市| 龙州县| 科技| 怀远县| 吉林省| 辰溪县| 轮台县| 济南市| 绥宁县| 冕宁县| 礼泉县| 桑植县| 新营市| 南靖县| 崇州市| 定日县|