首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

MyBatis 整合 Druid 連接池完整配置指南

     編輯:Java 綜合教學

Maven 依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.20</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.1.1</version>
</dependency>

Spring XML 配置

<!-- 1. 數據源:DruidDataSource -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!-- 基礎屬性 -->
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/ssmhello?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" />
    <property name="username" value="root" />
    <property name="password" value="2424246258" />

    <!-- 連接池核心參數 -->
    <property name="initialSize" value="5" />           <!-- 初始連接數 -->
    <property name="minIdle" value="5" />               <!-- 最小空閒 -->
    <property name="maxActive" value="20" />            <!-- 最大活躍 -->
    <property name="maxWait" value="60000" />           <!-- 獲取連接超時(ms) -->

    <!-- 連接生命周期管理 -->
    <property name="removeAbandoned" value="true" />           <!-- 回收棄用連接 -->
    <property name="removeAbandonedTimeout" value="180" />      <!-- 超時秒數 -->
    <property name="logAbandoned" value="true" />             <!-- 記錄棄用日誌 -->

    <!-- 空閒連接檢測 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />  <!-- 檢測間隔 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />  <!-- 最小存活時間 -->
    <property name="validationQuery" value="SELECT 1" />         <!-- 驗證 SQL -->
    <property name="testWhileIdle" value="true" />               <!-- 空閒時驗證 -->
    <property name="testOnBorrow" value="false" />             <!-- 獲取時驗證(影響性能) -->
    <property name="testOnReturn" value="false" />             <!-- 歸還時驗證 -->

    <!-- 監控統計 -->
    <property name="filters" value="stat,wall,slf4j" />  <!-- StatViewServlet、WallFilter、日誌 -->
</bean>

<!-- 2. SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath:mapper/*.xml" />
    <property name="typeAliasesPackage" value="com.example.entity" />
</bean>

<!-- 3. Mapper 掃描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.dao" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

<!-- 4. 事務管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />

Spring Boot 2.x/3.x application.yml 配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssmhello?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
    username: root
    password: 2424246258
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      validation-query: SELECT 1
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      remove-abandoned: true
      remove-abandoned-timeout: 180
      log-abandoned: true
      filters: stat,wall,slf4j
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin123

關鍵參數調優建議

參數建議值說明
initialSizeCPU 核心數啟動預熱,避免首次請求慢
maxActive(CPU核心數 * 2) + 磁盤數經驗公式,防止連接耗盡
minIdle= initialSize保持最小熱備
validationQuerySELECT 1極輕量,MySQL/Oracle 通用
testWhileIdletrue後台線程檢測,不影響業務線程
removeAbandonedtrue防止連接洩漏導致池耗盡

監控頁面訪問

啟動項目後訪問:https://localhost:8080/druid/index.html(需配置 stat-view-servlet)

  • 實時 SQL 監控、慢查詢分析
  • 連接池狀態:活躍/空閒/等待線程數
  • 防火牆:SQL 注入攔截日誌

常見坑點

  1. 驅動類名:MySQL 8.0+ 必須用 com.mysql.cj.jdbc.Driver
  2. url 必須加 useSSL=false&serverTimezone=Asia/Shanghai 否則警告/報錯
  3. filters 配置 slf4j 需專案引入 slf4j-api + 實現
  4. 多數據源場景:每個 DataSource 獨立配置 @Primary 標識主庫

Druid 作為國產連接池標桿,功能豐富、監控強大、性能優異,是 MyBatis/Spring 生態首選。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved