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

Java 連接六大主流數據庫完整配置指南

     編輯:Java 相關知識

前言

JDBC 統一了 Java 訪問關係數據庫的 API,但各數據庫的驅動類名、URL 格式、連接參數差異巨大。本文匯總 Oracle、MySQL、PostgreSQL、SQL Server、DB2、Sybase 六大主流數據庫的標準連接配置,附帶連接池最佳實踐。

一、六大數據庫標準連接配置

1. MySQL (最常用)

<!-- 驅動:com.mysql.cj.jdbc.Driver (8.0+) -->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb?
    useSSL=false&
    serverTimezone=UTC&
    characterEncoding=utf8mb4&
    allowPublicKeyRetrieval=true&
    rewriteBatchedStatements=true&
    useServerPrepStmts=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>

關鍵參數:rewriteBatchedStatements=true 開啟批次 SQL 重寫,性能提升 10 倍+;useServerPrepStmts=true 服務端預編譯。

2. PostgreSQL (功能最強)

<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432/mydb?
    currentSchema=public&
    prepareThreshold=5&
    preferQueryMode=extended"/>
<property name="username" value="postgres"/>
<property name="password" value="123456"/>

特色:支援 JSONB、數組、幾何類型、邏輯複製、豐富索引類型。

3. Oracle (企業級標配)

<!-- 瘦驅動 -->
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<!-- SID 模式 -->
<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
<!-- 服務名模式 (推薦 RAC) -->
<property name="url" value="jdbc:oracle:thin:@//localhost:1521/service_name"/>
<!-- TNS 別名 -->
<property name="url" value="jdbc:oracle:thin:@my_tns_entry"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>

依賴:ojdbc8.jar (JDK 8+),需從 Oracle 官網下載或配置 Maven 私服。

4. SQL Server (Windows 生態)

<!-- Microsoft 官方驅動 -->
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1433;
    databaseName=mydb;
    encrypt=true;
    trustServerCertificate=true;
    loginTimeout=30"/>
<property name="username" value="sa"/>
<property name="password" value="StrongPass123"/>

注意:默認端口 1433,命名實例需指定 instanceName 或動態端口。

5. DB2 (大型機/銀行級)

<property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/>
<property name="url" value="jdbc:db2://localhost:50000/MYDB:
    currentSchema=SCOTT;
    securityMechanism=3; -- 僅用戶名密碼
    retrieveMessagesFromServerOnGetMessage=true;"/>
<property name="username" value="db2inst1"/>
<property name="password" value="password"/>

驅動包:db2jcc4.jar、db2jcc_license_cu.jar。

6. Sybase / SAP ASE

<property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver"/>
<property name="url" value="jdbc:sybase:Tds:localhost:5000/mydb?
    SERVICENAME=ASE16&
    CHARSET=utf8"/>
<property name="username" value="sa"/>
<property name="password" value="password"/>

二、統一連接池配置(HikariCP 推薦)

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    
    <!-- 核心池大小:CPU 核心數 * 2 + 1 -->
    <property name="maximumPoolSize" value="20"/>
    <property name="minimumIdle" value="5"/>
    
    <!-- 超時控制 -->
    <property name="connectionTimeout" value="30000"/>      -- 獲取連接超時 30s
    <property name="idleTimeout" value="600000"/>           -- 空閒回收 10min
    <property name="maxLifetime" value="1800000"/>          -- 最大壽命 30min
    <property name="leakDetectionThreshold" value="60000"/> -- 洩漏檢測 1min
    
    <!-- 連接測試 -->
    <property name="connectionTestQuery" value="SELECT 1"/>
    <property name="validationTimeout" value="5000"/>
    
    <!-- 性能優化 -->
    <property name="dataSourceProperties">
        <props>
            <prop key="cachePrepStmts">true</prop>
            <prop key="prepStmtCacheSize">250</prop>
            <prop key="prepStmtCacheSqlLimit">2048</prop>
        </props>
    </property>
</bean>

三、多數據源動態路由實戰

// 1. 定義數據源枚舉
public enum DataSourceType { MASTER, SLAVE_1, SLAVE_2 }

// 2. ThreadLocal 持有當前數據源
public class DynamicDataSourceContextHolder {
    private static final ThreadLocal<DataSourceType> context = new ThreadLocal<>();
    public static void set(DataSourceType type) { context.set(type); }
    public static DataSourceType get() { return context.get(); }
    public static void clear() { context.remove(); }
}

// 3. 繼承 AbstractRoutingDataSource
public class DynamicRoutingDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSourceContextHolder.get();
    }
}

// 4. AOP 切面自動切換
@Aspect
@Component
public class DataSourceRoutingAspect {
    @Before("@annotation(com.example.annotation.Master)")
    public void master() { DynamicDataSourceContextHolder.set(DataSourceType.MASTER); }
    
    @Before("@annotation(com.example.annotation.Slave)")
    public void slave() { DynamicDataSourceContextHolder.set(DataSourceType.SLAVE_1); }
    
    @After("@annotation(com.example.annotation.Master) || @annotation(com.example.annotation.Slave)")
    public void clear() { DynamicDataSourceContextHolder.clear(); }
}

// 5. 使用註解聲明
@Service
public class OrderService {
    @Master // 寫操作走主庫
    public void createOrder(Order order) { ... }
    
    @Slave  // 讀操作走從庫
    public Order getOrder(Long id) { ... }
}

四、常見連接問題排查清單

錯誤現象可能原因解決方案
ClassNotFoundException: Driver驅動包未導入/版本不匹配檢查 Maven 依賴、JDBC 版本與 JDK 兼容性
Communications link failure網絡不通/防火牆/數據庫未啟動/端口錯誤telnet ip port、檢查 bind-address、security group
Access denied for user用戶名密碼錯誤/權限不足/主機限制GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;
SSLHandshakeExceptionMySQL 8.0+ 默認 SSL/驅動版本過低useSSL=false 或配置信任憑證、升級驅動
Connection reset / Broken pipe連接空閒超過數據庫 wait_timeout 被斷開HikariCP 配置 maxLifetime < wait_timeout、啟用 keepAlive
Public Key Retrieval is not allowedMySQL 8.0 caching_sha2_password 插件allowPublicKeyRetrieval=true 或改用 mysql_native_password

五、總結

掌握六大數據庫的驅動類名、URL 參數語法、關鍵優化參數,配合HikariCP 統一連接池與動態路由 AOP,即可應對絕大多數異構數據庫集成場景。建議建立項目級JDBC 配置模板庫,新增數據源時直接複製調整,減少低級錯誤。

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