池化技術:準備一些預先的資源,過來就連線預先準備好的
1、最小連線數:如果常用的連線數是10的話,那最小連線數一般也設定為10。
2、最大連線數:業務最高承載上限(不是併發?),超過了最大連線數就排隊等待。
3、等待超時:如果排隊時間超過某個值,就不再等待。
編寫連線池,實現乙個資料來源介面datasource,裡面自帶連線。
dbcp
c3p0
druid:阿里巴巴
使用了這些資料庫連線池之後,我們在專案開發中就不需要編寫連線資料庫的**了!
jar包:
配置模板:
#連線設定
driverclassname=com.mysql.cj.jdbc.driver
url=jdbc:mysql://localhost:3306/jdbcstudy?servertimezone=asia/shanghai&useunicode=true&characterencoding=utf8&usessl=true
username=root
password=123
#初始化池大小,即一開始池中就會有10個連線物件
initialsize=10
#最大連線數,如果設定為非正數,表示沒有限制!即無限大
maxactive=50
#最大空閒連線,如果設定為負數,表示沒有限制!即無限大
maxidle=20
#最小空閒連線
minidle=5
#最大等待時間(ms),預設值為-1,表示無限期等待,不會丟擲異常。
maxwait=60000
#連線屬性
#就是原來放在url後面的引數,可以使用connectionproperties來指定
#如果已經在url後面指定了,那麼就不用在這裡指定了。
#useserverprepstmts=true,mysql開啟預編譯功能
#cacheprepstmts=true,mysql開啟快取preparedstatement功能,
#prepstmtcachesize=50,快取preparedstatement的上限
#prepstmtcachesqllimit=300,當sql模板長度大於300時,就不再快取它
connectionproperties=useunicode=true;characterencoding=utf8;
#連線的預設提交方式
#預設值為true
defaultautocommit=true
#連線是否為唯讀連線
#connection有一對方法:setreadonly(boolean)和isreadonly()
#如果是唯讀連線,那麼你只能用這個連線來做查詢
#指定連線為唯讀是為了優化!這個優化與併發事務相關!
#如果兩個併發事務,對同一行記錄做增、刪、改操作,是不是一定要隔離它們啊?
#如果兩個併發事務,對同一行記錄只做查詢操作,那麼是不是就不用隔離它們了?
#如果沒有指定這個屬性值,那麼是否為唯讀連線,這就由驅動自己來決定了。即connection的實現類自己來決定!
defaultreadonly=
#指定事務的事務隔離級別
#可選值:none,read_uncommitted, read_committed, repeatable_read, serializable
#如果沒有指定,那麼由驅動中的connection實現類自己來決定
defaulttransactionisolation=read_uncommitted
jar包:
配置模板:
<?xml version="1.0" encoding="utf-8"?>
>
>
name
="driverclass"
>
com.mysql.cj.jdbc.driverproperty
>
name
="jdbcurl"
>
jdbc:mysql://localhost:3306/jdbcstudy?servertimezone=asia/shanghai&
useunicode=true&characterencoding=utf8&usessl=trueproperty
>
name
="user"
>
rootproperty
>
name
="password"
>
123property
>
name
="acquireincrement"
>
5property
>
name
="initialpoolsize"
>
10property
>
name
="maxpoolsize"
>
20property
>
name
="minpoolsize"
>
5property
>
default-config
>
name
="mysql"
>
name
="driverclass"
>
com.mysql.cj.jdbc.driverproperty
>
name
="jdbcurl"
>
jdbc:mysql://localhost:3306/jdbcstudy?servertimezone=asia/shanghai&
useunicode=true&characterencoding=utf8&usessl=trueproperty
>
name
="user"
>
rootproperty
>
name
="password"
>
123property
>
name
="acquireincrement"
>
5property
>
name
="initialpoolsize"
>
10property
>
name
="maxpoolsize"
>
20property
>
name
="minpoolsize"
>
5property
>
named-config
>
c3p0-config
>
注意xml裡「&」符號需寫成「&;」
無論用什麼資料來源,datasource介面不變,方法就不會變。後期需要深入學習的:druid(和springboot)。
JDBC 資料庫連線池
資料庫連線池原理 傳統方式 當有多個執行緒,每個執行緒都需要連線資料庫執行sql語句的話,那麼每個執行緒都會建立乙個連線,並且在使用完畢後,關閉連線。建立連線和關閉連線的過程也是比較消耗時間的,當多執行緒併發的時候,系統就會變得很卡頓。同時,乙個資料庫同時支援的連線總數也是有限的,如果多執行緒併發量...
JDBC資料庫連線池
為了從本質上理解資料庫連線池的實現原理,可以自定義實現乙個連線池。本連線池只是簡單的實現了連線池的取得連線的功能,並為其新增了歸還連線的方法,其他方法均未實現。public class mybdcp implements datasource catch classnotfoundexception...
JDBC和資料庫連線池
jdbc是大家都很熟悉的一門技術,在這就不過多闡述原理,直接上 便於運用時檢視 jdbc使用的幾個步驟 1 載入並註冊資料庫驅動 drivermanager.registerdriver driver driver 或者 class.forname drivername 2 獲取資料庫連線 conn...