欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)數(shù)據(jù)連接池Druid舉例

 更新時(shí)間:2022年03月17日 09:24:36   作者:晴天哥_王志  
本文主要介紹了Java實(shí)現(xiàn)數(shù)據(jù)連接池Druid舉例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

開篇

Druid號(hào)稱是Java語言中最好的數(shù)據(jù)庫連接池,并且能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能。作為日常使用較多的數(shù)據(jù)庫連接組件,純粹個(gè)人興趣研究下理解下的實(shí)現(xiàn)原理。

理解一個(gè)工具組件最好的方式就是進(jìn)行 debug,這里建議大家下載下參考連接中的 druid demo,修改下具體的數(shù)據(jù)庫連接參數(shù)就可以直接進(jìn)行調(diào)試跟蹤。

之所以強(qiáng)調(diào) Demo 的重要性,在于通過 demo 能夠跟蹤所有的執(zhí)行流程,有了 Demo 剩下的事情只要花時(shí)間都能很好的梳理。

Druid的調(diào)試

url=jdbc:mysql://localhost:3306/github_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=true
username=root
password=123456
name=zzs001
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=4
maxActive=8
minIdle=0
maxWait=-1
poolPreparedStatements=false
maxOpenPreparedStatements=10
validationQuery=select 1 from dual
validationQueryTimeout=-1
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
timeBetweenEvictionRunsMillis=-1
minEvictableIdleTimeMillis=1800000
defaultAutoCommit=true
defaultReadOnly=false
defaultTransactionIsolation=REPEATABLE_READ
defaultCatalog=github_demo
removeAbandoned=false
removeAbandonedTimeoutMillis=300*1000
logAbandoned=true
filters=log4j,wall,mergeStat
connectionProperties=druid.useGlobalDataSourceStat=true;druid.stat.logSlowSql=true;druid.stat.slowSqlMillis=5000
accessToUnderlyingConnectionAllowed=false
init=true

基礎(chǔ)的配置信息如上,核心在于 JDBC 的連接地址信息。

public class DruidDataSourceTest {

? ? @Test
? ? public void save() throws SQLException {
? ? ? ? // 創(chuàng)建sql
? ? ? ? String sql = "insert into demo_user values(null,?,?,?,?,?)";
? ? ? ? Connection connection = null;
? ? ? ? PreparedStatement statement = null;
? ? ? ? try {
? ? ? ? ? ? // 獲得連接
? ? ? ? ? ? connection = JDBCUtils.getConnection();
? ? ? ? ? ? // 開啟事務(wù)設(shè)置非自動(dòng)提交
? ? ? ? ? ? connection.setAutoCommit(false);
? ? ? ? ? ? // 獲得Statement對(duì)象
? ? ? ? ? ? statement = connection.prepareStatement(sql);
? ? ? ? ? ? // 設(shè)置參數(shù)
? ? ? ? ? ? statement.setString(1, "zzf003");
? ? ? ? ? ? statement.setInt(2, 18);
? ? ? ? ? ? statement.setDate(3, new Date(System.currentTimeMillis()));
? ? ? ? ? ? statement.setDate(4, new Date(System.currentTimeMillis()));
? ? ? ? ? ? statement.setBoolean(5, false);
? ? ? ? ? ? // 執(zhí)行
? ? ? ? ? ? statement.executeUpdate();
? ? ? ? ? ? // 提交事務(wù)
? ? ? ? ? ? connection.commit();
? ? ? ? } finally {
? ? ? ? ? ? // 釋放資源
? ? ? ? ? ? JDBCUtils.release(connection, statement, null);
? ? ? ? }
? ? }
}

核心步驟獲獲取 Connection 并設(shè)置并通過 Connection 設(shè)置statement,最后通過statement進(jìn)行 SQL 的執(zhí)行。

public class JDBCUtils {

? ? private static DataSource dataSource;
? ? private static ThreadLocal<Connection> tl = new ThreadLocal<>();
? ? private static final Log log = LogFactory.getLog(JDBCUtils.class);

? ? static {
? ? ? ? init();
? ? }

? ? private static void init() {
? ? ? ? Properties properties = new Properties();
? ? ? ? InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
? ? ? ? try {
? ? ? ? ? ? properties.load(in);
? ? ? ? ? ? dataSource = DruidDataSourceFactory.createDataSource(properties);
? ? ? ? } catch(Exception e) {
? ? ? ? ? ? throw new RuntimeException("創(chuàng)建數(shù)據(jù)源失敗", e);
? ? ? ? }
? ? }

? ? /**
? ? ?* <p>獲取數(shù)據(jù)庫連接對(duì)象的方法,線程安全</p>
? ? ?* @return: Connection
? ? ?*/
? ? public static Connection getConnection() throws SQLException {
? ? ? ? // 從當(dāng)前線程中獲取連接對(duì)象
? ? ? ? Connection connection = tl.get();
? ? ? ? // 判斷為空的話,創(chuàng)建連接并綁定到當(dāng)前線程
? ? ? ? if(connection == null) {
? ? ? ? ? ? connection = createConnection();
? ? ? ? ? ? tl.set(connection);
? ? ? ? }
? ? ? ? return connection;
? ? }

? ? /**
? ? ?* <p>創(chuàng)建數(shù)據(jù)庫連接</p>
? ? ?* @return: Connection
? ? ?* @throws SQLException?
? ? ?*/
? ? private static Connection createConnection() throws SQLException {
? ? ? ? Connection conn = null;
? ? ? ? // 獲得連接
? ? ? ? conn = dataSource.getConnection();
? ? ? ? return conn;
? ? }
}
  • 通過DruidDataSourceFactory創(chuàng)建 DataSource。
  • 通過DataSource獲取 Connection。

參考

druid源碼倉庫
druid demo

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

相關(guān)文章

  • Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼

    Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼

    Java是一種流行的編程語言,驗(yàn)證碼是一種常用的網(wǎng)絡(luò)安全技術(shù)。Java發(fā)展至今,網(wǎng)上也出現(xiàn)了各種各樣的驗(yàn)證碼,下面是用Java實(shí)現(xiàn)短信驗(yàn)證碼的總結(jié),感興趣的可以了解一下
    2023-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)之線段樹詳解

    Java數(shù)據(jù)結(jié)構(gòu)之線段樹詳解

    線段樹是一種二叉搜索樹,與區(qū)間樹相似,它將一個(gè)區(qū)間劃分成一些單元區(qū)間,每個(gè)單元區(qū)間對(duì)應(yīng)線段樹中的一個(gè)葉結(jié)點(diǎn)。本文將介紹線段樹的Java實(shí)現(xiàn)代碼,需要的可以參考一下
    2022-01-01
  • SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證

    SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證

    為了保證參數(shù)的正確性,我們需要使用參數(shù)驗(yàn)證機(jī)制,來檢測(cè)并處理傳入的參數(shù)格式是否符合規(guī)范,所以本文就來和大家聊聊如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證吧
    2023-08-08
  • application.yml的格式寫法和pom.xml讀取配置插件方式

    application.yml的格式寫法和pom.xml讀取配置插件方式

    這篇文章主要介紹了application.yml的格式寫法和pom.xml讀取配置插件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java 后端開發(fā)中Tomcat服務(wù)器運(yùn)行不了的五種解決方案

    Java 后端開發(fā)中Tomcat服務(wù)器運(yùn)行不了的五種解決方案

    tomcat是在使用Java編程語言開發(fā)服務(wù)端技術(shù)使用最廣泛的服務(wù)器之一,但經(jīng)常在開發(fā)項(xiàng)目的時(shí)候會(huì)出現(xiàn)運(yùn)行不了的情況,這里總結(jié)出幾種能解決的辦法
    2021-10-10
  • Java中減少if-else的幾種方式

    Java中減少if-else的幾種方式

    if判斷語句是很多編程語言的重要組成部分,但是,若我們最終編寫了大量嵌套的if語句,這將使得我們的代碼更加復(fù)雜和難以維護(hù),本文主要介紹了Java中減少if-else的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 利用Maven添加工程版本信息及時(shí)間戳

    利用Maven添加工程版本信息及時(shí)間戳

    這篇文章主要介紹了利用Maven添加工程版本信息及時(shí)間戳方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 使用RestTemplate 調(diào)用遠(yuǎn)程接口上傳文件方式

    使用RestTemplate 調(diào)用遠(yuǎn)程接口上傳文件方式

    這篇文章主要介紹了使用RestTemplate 調(diào)用遠(yuǎn)程接口上傳文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù)

    Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù)

    今天小編就為大家分享一篇關(guān)于Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • springboot泛型封裝開發(fā)方式

    springboot泛型封裝開發(fā)方式

    這篇文章主要介紹了springboot泛型封裝開發(fā)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論