# JDBC 8.0+ 驅動類
driverClassName=com.mysql.cj.jdbc.Driver
# 連接 URL 參數詳解
url=jdbc:mysql://localhost:3306/bbscs6?
useUnicode=true&
characterEncoding=UTF-8&
serverTimezone=Asia/Shanghai&
useSSL=false&
allowPublicKeyRetrieval=true&
autoReconnect=true&
failOverReadOnly=false
username=root
password=your_strong_password
# 連接池常用參數 (HikariCP/Druid)
initialSize=5
maxActive=20
minIdle=5
maxWait=60000
validationQuery=SELECT 1
testWhileIdle=true
timeBetweenEvictionRunsMillis=60000
關鍵參數:serverTimezone 解決時區偏移;useSSL=false 內網環境提速;allowPublicKeyRetrieval 配合 caching_sha2_password 認證。
# 驅動類 (ojdbc8.jar / ojdbc10.jar)
driverClassName=oracle.jdbc.OracleDriver
# Thin 驅動 URL 格式
# SID 格式 (傳統)
url=jdbc:oracle:thin:@192.168.0.1:1521:ORCL
# Service Name 格式 (推薦,支援 RAC/PDB)
url=jdbc:oracle:thin:@//192.168.0.1:1521/ORCLPDB1
username=bbscs
password=bbscs
# 連接屬性
defaultAutoCommit=true
# Hibernate 方言
hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
# Oracle 9i 舊版
# hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
注意:Oracle 12c+ 多租戶架構下,連接 PDB 必須使用 Service Name;SID 僅能連接 CDB$ROOT。
# Microsoft 官方驅動 (mssql-jdbc 9.4+)
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
# URL 格式
url=jdbc:sqlserver://localhost:1433;
databaseName=bbscs;
encrypt=true;
trustServerCertificate=true;
loginTimeout=30;
socketTimeout=30
username=bbscs
password=bbscs
defaultAutoCommit=true
hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
# 版本對應:2012Dialect 適用 2012-2019;2008Dialect 適用 2008/R2
加密參數:SQL Server 2022+ 預設強制加密,encrypt=true;trustServerCertificate=true 允許自簽憑證。
# 核心池大小 = CPU 核心數 * 2 + 有效磁盤數 (經驗公式)
maximumPoolSize=20
minimumIdle=5
# 生存時間與驗證
maxLifetime=1800000 # 30 分鐘,防止資料庫端斷開空閒連接
idleTimeout=600000 # 10 分鐘
connectionTimeout=30000 # 獲取連接超時 30s
validationTimeout=5000 # 驗證超時 5s
leakDetectionThreshold=60000 # 洩漏檢測 60s
# 驗證查詢 (MySQL 8.0+ 無需 SELECT 1,驅動內建 isValid())
# validationQuery=SELECT 1
# 隔離級別 (根據業務一致性要求)
# connectionInitSql=SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
| 數據庫 | Hibernate 5.x 方言類 | Hibernate 6.x 方言類 (org.hibernate.dialect) |
|---|---|---|
| MySQL 5.7 | org.hibernate.dialect.MySQL57Dialect | MySQLDialect (自動檢測版本) |
| MySQL 8.0 | org.hibernate.dialect.MySQL8Dialect | MySQLDialect |
| Oracle 12c/19c | org.hibernate.dialect.Oracle12cDialect | OracleDialect |
| SQL Server 2017+ | org.hibernate.dialect.SQLServer2012Dialect | SQLServerDialect |
| PostgreSQL 13+ | org.hibernate.dialect.PostgreSQL10Dialect | PostgreSQLDialect |
Hibernate 6.x 採用**統一方言類 + 運行時版本檢測**,大幅簡化配置。
# application.yml
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/bbscs6?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: your_password
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 600000
max-lifetime: 1800000
connection-timeout: 30000
pool-name: MySQL-HikariCP
jpa:
hibernate:
ddl-auto: none # 生產環境禁用自動建表
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
format_sql: true
show_sql: false # 生產關閉,用 P6Spy/Log4jdbc 攔截
jdbc:
batch_size: 20
fetch_size: 50
| 錯誤現象 | 可能原因 | 解決方案 |
|---|---|---|
| Communications link failure | 網絡不通/防火牆/資料庫未啟動/bind-address 錯誤 | telnet IP 3306;檢查 my.cnf bind-address=0.0.0.0;安全組放行 |
| Public Key Retrieval is not allowed | MySQL 8.0 caching_sha2_password 需傳遞公鑰 | URL 加 allowPublicKeyRetrieval=true 或改用 mysql_native_password |
| ORA-12505 / ORA-12514 | SID/Service Name 錯誤、Listener 未註冊實例 | lsnrctl status 確認實例名;改用 Service Name 格式 URL |
| The driver could not establish a secure connection to SQL Server | SSL 憑證不受信 | trustServerCertificate=true 或導入 CA 憑證 |
| Connection reset / Broken pipe | 連接池空閒連接被資料庫/防火牆斷開 | 調整 maxLifetime < wait_timeout;啟用 testWhileIdle + validationQuery |
GRANT SELECT, INSERT, UPDATE, DELETE ON db.* TO 'app_user'@'app_server_ip'。require_secure_transport=ON,JDBC useSSL=true&verifyServerCertificate=true。標準化 JDBC 配置不僅能消除「在我機器上能跑」的環境差異,更是微服務架構下服務治理、故障快速定位、安全合規審計的基礎設施。建議將上述配置模板納入團隊脚手架,實現新項目零配置接入。