JDBC 資料庫連線池筆記

2021-10-21 14:51:38 字數 3558 閱讀 2998

池化技術:準備一些預先的資源,過來就連線預先準備好的

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...