DataSource 作為 JDBC 規範定義的連接工廠介面,是 Spring 應用訪問資料庫的核心抽象。本文通過完整實例,演示 Spring 2.5 環境下三種主流 DataSource 配置方式的遷移與最佳實踐,幫助開發者根據項目階段選擇最適合的方案。
Spring 提供的 org.springframework.jdbc.datasource.DriverManagerDataSource 實現了標準 DataSource 介面,但不提供連接池,每次請求都會建立新連接,適合單元測試與簡單獨立應用。
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "https://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 資料庫資料源定義 -->
<bean id="rptds" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/testdb</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>leizhimin</value></property>
</bean>
</beans>
ContextHelper:單例模式載入 Spring 容器,提供 Bean 獲取入口。
DBUtil:封裝 DataSource 獲取、連接建立、存儲過程調用等通用操作,統一異常處理與日誌記錄。
當應用進入生產,必須引入連接池。DBCP (Database Connection Pool) 是成熟開源方案,需額外引入三個 JAR:
<bean id="rptds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/testdb</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>leizhimin</value></property>
</bean>
關鍵點:destroy-method="close" 確保容器關閉時正確釋放連接池資源。
在 Web 容器(Tomcat、WebLogic 等)預先配置好連接池的情況下,應用通過 JNDI 查找使用,實現資源與代碼完全解耦。
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jdbc/testds</value></property>
</bean>
需依賴 spring-context.jar,jndiName 需與容器配置(如 Tomcat context.xml 中的 Resource name)一致。
testdb 與表 t_user,插入測試數據。Test.java 通過 DBUtil.makeConnection() 獲取連接,執行 SELECT * FROM t_user。haha hehe
lei aaa
Process finished with exit code 0| 階段 | 推薦方案 | 核心優勢 | 依賴複雜度 |
|---|---|---|---|
| 本地開發/單元測試 | DriverManagerDataSource | 零配置、脫離容器運行 | 低 |
| 測試/預發環境 | DBCP BasicDataSource | 連接池效能、參數可調優 | 中(3個JAR) |
| 生產環境 | JNDI DataSource | 容器統一管理、安全隔離、動態調整 | 低(僅需spring-context) |
Spring 的 DataSource 抽象層讓配置遷移極為平滑:只需修改 Bean 定義,業務代碼完全無感知。建議團隊建立統一的 DataSourceConfig.xml,通過 Maven Profile 或 Spring Profile 機制實現多環境配置隔離,做到「開發用簡單,生產用健壯」。