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

SSH 框架整合進階:Spring 管理 Hibernate SessionFactory 與 C3P0 連接池

     編輯:Java 綜合教學

演進目標

在 SSH (Struts2 + Spring + Hibernate) 基礎上進一步完善:

  1. 由 Spring 容器注入 SessionFactory,避免手動 new 實例。
  2. 引入 C3P0 連接池替代 Hibernate 內置簡易池,提升生產環境性能與穩定性。

環境準備

  • Struts2、Spring、Hibernate 核心 JAR 包。
  • 從 Hibernate 發布包 lib/optional/c3p0/ 複製 C3P0 相關 JAR 至項目 lib 目錄。

移除 hibernate.cfg.xml,改用 Spring 配置

原 hibernate.cfg.xml 典型配置

<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=webLastExam</property>
<property name="connection.username">sa</property>
<property name="connection.password">123456</property>
<property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<property name="connection.pool_size">5</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="entity/BookCard.hbm.xml"/>

Spring applicationContext.xml 整合配置

<context:property-placeholder location="classpath:jdbcSql.properties" ignore-unresolvable="true"/>

<!-- 數據源:C3P0 連接池 -->
<bean id="myDataSourceSql" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="idleConnectionTestPeriod" value="300"/>
    <property name="maxIdleTime" value="900"/>
    <property name="maxPoolSize" value="2"/>
</bean>

<!-- SessionFactory 由 Spring 管理 -->
<bean id="mySessionFactorySql" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSourceSql"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.connection.autocommit">false</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
    <property name="mappingResources">
        <list><value>entity/BookCard.hbm.xml</value></list>
    </property>
</bean>

<!-- DAO/Service/Action 注入鏈 -->
<bean id="myDaoImp" class="dao.MyDaoImp" scope="prototype">
    <property name="sessionFactorySql" ref="mySessionFactorySql"/>
</bean>
<bean id="myServiceImp" class="services.MyServiceImp" scope="prototype">
    <property name="md" ref="myDaoImp"/>
</bean>
<bean id="myActionService" class="action.ActionService" scope="prototype">
    <property name="ms" ref="myServiceImp"/>
</bean>

外部化配置:jdbcSql.properties

jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost:1433;DatabaseName=webLastExam
jdbc.user=sa
jdbc.password=123456

部署時僅需修改此文件,無需重新打包代碼。

映射文件無變化

BookCard.hbm.xml 保持原有結構,包含類映射、主鍵生成策略、屬性映射等。

優勢總結

  • 解耦: 數據源、SessionFactory 交由 Spring 管理,業務層無感知。
  • 性能: C3P0 提供成熟的連接池管理(空閒檢測、最大連接數、超時回收)。
  • 可維護: 配置外部化,環境遷移零代碼修改。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved