<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>
<!-- 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:
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
| 參數 | 建議值 | 說明 |
|---|---|---|
initialSize | CPU 核心數 | 啟動預熱,避免首次請求慢 |
maxActive | (CPU核心數 * 2) + 磁盤數 | 經驗公式,防止連接耗盡 |
minIdle | = initialSize | 保持最小熱備 |
validationQuery | SELECT 1 | 極輕量,MySQL/Oracle 通用 |
testWhileIdle | true | 後台線程檢測,不影響業務線程 |
removeAbandoned | true | 防止連接洩漏導致池耗盡 |
啟動項目後訪問:https://localhost:8080/druid/index.html(需配置 stat-view-servlet)
com.mysql.cj.jdbc.Driverurl 必須加 useSSL=false&serverTimezone=Asia/Shanghai 否則警告/報錯filters 配置 slf4j 需專案引入 slf4j-api + 實現@Primary 標識主庫Druid 作為國產連接池標桿,功能豐富、監控強大、性能優異,是 MyBatis/Spring 生態首選。