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

Spring DataSource 靈活配置實戰:從 DriverManagerDataSource 到 DBCP 與 JNDI

     編輯:Java 相關知識

前言

DataSource 作為 JDBC 規範定義的連接工廠介面,是 Spring 應用訪問資料庫的核心抽象。本文通過完整實例,演示 Spring 2.5 環境下三種主流 DataSource 配置方式的遷移與最佳實踐,幫助開發者根據項目階段選擇最適合的方案。

環境基線

  • Java SE 1.5
  • Spring Framework 2.5.1
  • MySQL 5.x + mysql-connector-java 5.1.5

方案一:DriverManagerDataSource —— 開發測試首選

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 獲取、連接建立、存儲過程調用等通用操作,統一異常處理與日誌記錄。

方案二:Apache DBCP BasicDataSource —— 生產環境標準選擇

當應用進入生產,必須引入連接池。DBCP (Database Connection Pool) 是成熟開源方案,需額外引入三個 JAR:

  • commons-dbcp.jar
  • commons-pool.jar
  • commons-collections.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" 確保容器關閉時正確釋放連接池資源。

方案三:JNDI DataSource —— 容器托管模式

在 Web 容器(Tomcat、WebLogic 等)預先配置好連接池的情況下,應用通過 JNDI 查找使用,實現資源與代碼完全解耦。

Spring 配置

<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)一致。

完整測試驗證流程

  1. 建立資料庫 testdb 與表 t_user,插入測試數據。
  2. 編寫 Test.java 通過 DBUtil.makeConnection() 獲取連接,執行 SELECT * FROM t_user。
  3. 控制台輸出:
    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 機制實現多環境配置隔離,做到「開發用簡單,生產用健壯」。

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