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

Hibernate.cfg.xml 完整配置指南:資料源、連線池 (C3P0/Proxool)、多資料庫範本

     編輯:Java 相關知識

hibernate.cfg.xml 是 Hibernate 核心配置入口,涵蓋資料源、連線池、方言、快取、映射檔引用等所有關鍵設定。本文整理最實用的配置模板與避坑指南。

1. 基礎結構與 JNDI 資料源

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "https://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="show_sql">true</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="jdbc.fetch_size">50</property>
        <property name="jdbc.batch_size">30</property>

        <!-- JNDI DataSource (應用伺服器環境) -->
        <property name="connection.datasource">java:comp/env/jdbc/myds</property>
        <property name="connection.provider_class">org.hibernate.connection.DatasourceConnectionProvider</property>

        <mapping resource="com/example/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

2. C3P0 連線池 (Hibernate 內建推薦)

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mydb</property>
<property name="connection.username">user</property>
<property name="connection.password">pass</property>

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property><!-- 秒,閒置回收 -->
<property name="hibernate.c3p0.max_statements">50</property><!-- PreparedStatement 快取 -->
  • 需引入 c3p0-0.9.x.jar + mchange-commons-java.jar
  • Hibernate 建立連線 → 交給 C3P0 管理

3. Proxool 連線池 (自建連線、支援 XML 配置)

hibernate.cfg.xml

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.proxool.pool_alias">pool1</property>
<property name="hibernate.proxool.xml">ProxoolConf.xml</property>
<property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>

ProxoolConf.xml (同目錄)

<proxool>
    <alias>pool1</alias>
    <driver-url>jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=utf8</driver-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver-properties>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
    </driver-properties>
    <house-keeping-sleep-time>90000</house-keeping-sleep-time>
    <maximum-new-connections>20</maximum-new-connections>
    <prototype-count>5</prototype-count>      <!-- 最小閒置 -->
    <maximum-connection-count>100</maximum-connection-count>
    <minimum-connection-count>10</minimum-connection-count>
</proxool>
  • 需引入 proxool-0.8.3.jar
  • Proxool 自行建立連線,參數全在 XML 設定

4. DBCP 連線池 (Hibernate 3 已棄用)

官方宣佈 DBCP 有 Bug (空連線洩漏),Hibernate 3 移除支援。 若舊專案必須用,需自行整合 commons-dbcp + commons-pool,不再贅述。

5. 三大主流資料庫連線範本

資料庫Driver ClassJDBC URL 範例必備 JAR
MySQLcom.mysql.jdbc.Driverjdbc:mysql://host:3306/db?characterEncoding=utf8mysql-connector-java.jar
SQL Server (jTDS)net.sourceforge.jtds.jdbc.Driverjdbc:jtds:sqlserver://host:1433;DatabaseName=dbjtds.jar
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@host:1521:sidojdbc6/8.jar

6. hbm2ddl.auto 四種模式

值行為適用環境
validate啟動時驗證結構一致性,不修改生產
update嘗試更新結構 (僅增欄/表,不刪)開發/測試
create啟動時 Drop 再 Create單元測試
create-drop啟動 Create,關閉 SessionFactory 時 Drop整合測試

避坑提醒

  • connection.provider_class 必須與連線池匹配:C3P0 不用設 (預設)、Proxool 必設、JNDI 必設
  • 屬性前綴:Hibernate 3.2+ 建議加 hibernate. 前綴 (如 hibernate.c3p0.max_size),無前綴相容但可能棄用
  • show_sql=true 僅輸出到 stdout,生產請用 log4j 設定 org.hibernate.SQL=DEBUG
  • 映射檔路徑 resource 為 classpath 相對路徑,file 為檔案系統絕對路徑
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved