測試工程為 springboot
測試表結構
阿里的 druid 資料庫連線池sql監控功能
druid 配置:
@bean
public servletregistrationbean statviewservlet()
@bean
public filterregistrationbean statfilter()
jpa資料來源配置
spring
:datasource
:url
: 資料庫位址
username
: 賬號
password
: 密碼
driver-class-name
: com.mysql.jdbc.driver
platform
: mysql
type
: com.alibaba.druid.pool.druiddatasource
# 下面為連線池的補充設定,應用到上面所有資料來源中
# 初始化大小,最小,最大
initialsize:1
minidle:3
maxactive:20
# 配置獲取連線等待超時的時間
maxwait
:60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
timebetweenevictionrunsmillis
:60000
# 配置乙個連線在池中最小生存的時間,單位是毫秒
minevictableidletimemillis
:30000
validationquery
: select 'x'
testwhileidle
:true
testonborrow
:false
testonreturn
:false
# 開啟pscache,並且指定每個連線上pscache的大小
poolpreparedstatements
:true
maxpoolpreparedstatementperconnectionsize:20
# 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆
filters
: stat,wall,log4j
# 通過connectproperties屬性來開啟mergesql功能;慢sql記錄
connectionproperties
: druid.stat.mergesql=true;druid.stat.slowsqlmillis=5000
# 合併多個druiddatasource的監控資料
#useglobaldatasourcestat: true
jpa:
# 配置 dbms 型別
database
: mysql
# 配置是否將執行的 sql 輸出到日誌
show-sql
:true
properties
:hibernate
:hbm2ddl
:# 配置開啟自動更新表結構
auto
: update
# 批次處理引數
order_inserts
:true
order_updates
:true
generate_statistics
: true 生成統計資訊
jdbc.batch_size
: 4 開啟批次儲存,一批次儲存量為10,如有100條資料則儲存十次
具體大小視情況而定
public
void
get(
)
此時控制台輸出資訊、已經開啟批次插入,應當生成一條sql才對。但是根據generate_statistics輸出資訊看批次操作是執行了一次,此處可能為日誌列印問題。此時可以根據druid sql監控檢視sql執**況判斷。
可以看到插入語句確實執行一次,檢視資料庫儲存情況,也沒有問題
此處測試資料依舊是四條,批次配置資訊更改為 jdbc.batch_size: 2 四條需兩次插入
此時sql列印依舊為四次,但generate_statistics輸出資訊批次操作為兩次
druid sql監控執行次數為兩次
關鍵配置
order_inserts:
true
order_updates:
true
generate_statistics:
true 生成統計資訊
jdbc.batch_size:
4 開啟批次儲存,一批次儲存量為10
,如有100條資料則儲存十次
具體大小視情況而定
JPA 呼叫儲存
要呼叫儲存過程,我們可以通過 entitymanager 物件的createnativequery 方法執行 sql 語句 注意 這裡說的是 sql語句,不是 hpql 呼叫儲存過程的 sql格式如下 在ejb3 中你可以呼叫的儲存過程有兩種 1 無返回值的儲存過程。2 返回值為 resultset...
批量資料的儲存方式
靜態陣列 順序儲存 動態陣列 順序儲存 鍊錶 鏈式儲存 鍊錶 不需要事先指定空間大小,動態分配和釋放記憶體。陣列和鍊錶的區別 陣列 編譯時決定大小,太大或太小?可以隨機訪問 a i 插入和刪除操作費時 鍊錶 執行時決定大小,需要時分配和不需要時釋放 不能隨機訪問 快速插入和刪除 記憶體的劃分與分配 ...
批量儲存資料 List 的使用
在機房收費這個系統中是沒有涉及到資料批量操作這樣的功能的,假如使用者某天提出了批量新增或修改學生 卡 資訊這樣的需求,我們應該怎樣實現呢?這是個很現實的問題,因為學生的資訊在一入學的時候就會儲存到乙個相應的系統裡,如教務系統。但是卡的資訊可能是後來才新增的。所以很可能提這樣的需求,從教務系統獲取乙份...