hibernate配置c3p0的问题,有个配置属性的作用不清楚求解。

我的hibernate.cfg.xml文件

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- hibernate配置 -->
<hibernate-configuration>

<session-factory>
    <!-- 数据库方言 -->
    <property name="dialect">
        org.hibernate.dialect.MySQLDialect
    </property>
    <!-- 数据库连接字符串 -->
    <property name="connection.url">
        jdbc:mysql://localhost/java_demo
    </property>
    <!-- 数据库用户名 -->
    <property name="connection.username">root</property>
    <!-- 密码 -->
    <property name="connection.password">root</property>
    <!-- 数据库驱动 -->
    <property name="connectiosn.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <!-- 是否显示执行的sql语句 -->
    <property name="show_sql">true</property>
    <!-- c3p0配置 -->
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="hibernate.c3p0.max_size">50 </property>
    <property name="hibernate.c3p0.min_size">2 </property>
    <property name="hibernate.c3p0.timeout">5000 </property>
    <property name="hibernate.c3p0.max_statements">100 </property>
    <property name="hibernate.c3p0.idle_test_period">3000 </property>
    <property name="hibernate.c3p0.acquire_increment">2 </property>
    <property name="hibernate.c3p0.maxIdleTime">1800 </property >
    <property name="hibernate.c3p0.validate">true </property>
    <!-- 配置映射文件 -->
    <mapping resource="hibernate/c3p0/entity/Student.hbm.xml" />
</session-factory>

</hibernate-configuration>

 

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
我想知道这个配置是什么意思

我加上这个配置之后测试时会出现警告(虽然出现警告,但执行结果是正确的),不加这个配置的话就不会出现这个警告,但是一样一来不知道hibernate到底有没有用c3p0数据源。警告信息如下:
2010-12-29 16:14:24 com.mchange.v2.log.MLog <clinit>
信息: MLog clients using java 1.4+ standard logging.
2010-12-29 16:14:24 com.mchange.v2.c3p0.C3P0Registry banner
信息: Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]
2010-12-29 16:14:24 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
信息: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@de79a485 [ c...
这个警告信息是什么意思?该如何处理?


最后问一下,怎么样测试才能测出hibernate到底有没有使用c3p0数据源?

hibernate.connection.provider_class

这个是获取jdbc connection的class参数,一种plugin策略。

相当于hibernate通过自己的class去调用c3p0,肯定有调用了。。

此外,还有一种方式,通过dataSource,比较常用

我的bonecp比c3p0更快。。

[code="xml"]


${jdbc.driverClass}


${jdbc.jdbcUrl}


${jdbc.username}


${jdbc.password}


${jdbc.idleConnectionTestPeriod}


${jdbc.idleMaxAge}


${jdbc.maxConnectionsPerPartition}


${jdbc.minConnectionsPerPartition}


${jdbc.partitionCount}


${jdbc.acquireIncrement}


${jdbc.statementsCacheSize}


${jdbc.releaseHelperThreads}

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="lobHandler" ref="defaultLobHandler"/>
    <!--
    <property name="packagesToScan" value="de.schaeftlein.dev.spring.rest.domain"/>
    -->
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.connection.url">${jdbc.jdbcUrl}</prop>
            <prop key="hibernate.connection.driver_class">${jdbc.driverClass}</prop>
            <prop key="hibernate.connection.password">${jdbc.username}</prop>
            <prop key="hibernate.connection.username">${jdbc.password}</prop>
            <prop key="hibernate.connection.autocommit">${jdbc.autoCommit}</prop>
            <prop key="hibernate.connection.release_mode">${hibernate.release_mode}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl}</prop>
            <prop key="hibernate.transaction.auto_close_session">${hibernate.auto_close_session}</prop>
            <prop key="hibernate.current_session_context_class">${hibernate.current_session_context_class}</prop>
            <prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
            <prop key="hibernate.bytecode.use_reflection_optimizer">false</prop>
            <prop key="hibernate.bytecode.provider">javassist</prop>
            <prop key="hibernate.transaction.flush_before_completion">${hibernate.flush_before_completion}</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
        </props>
    </property>
</bean>

[/code]

  1. 看log org.hibernate.connection.ConnectionProviderFactory - Initializing connection provider后面是什么

  2. 不信的话,用jconsole链接到你得服务器上,看mbean,c3p0有自己的mbean

怎么链接,在启动参数上面加上-Dcom.sun.management.jmxremote,然后去java/bin目录下面着jconsole,然后顺疼摸瓜

org.hibernate.connection.C3P0ConnectionProvider

指定connection的提供者,这里这个配置的,肯定就是使用了c3p0了。

1、有没有使用c3p0,可以调低日志显示级别,看日志

2、hibernate.connection.provider_class设定了连接器的提供者, 即使用什么连接池, 就对应哪个提供者.
该提供者会调用指定连接池的相关类、方法, 设置相关参数, 连接数据库的时候就会用到

个人拙见

信息 = info

这不是警告,警告是warn

warn = 警告