hibernate开发组推荐c3p0,spring开发组推荐dbcp,但是dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法 reconnect ,告诉连接被重置,这个设置可以解决。hibernate in action推荐c3p0和proxool。
强烈推荐proxool,因为他不但可以监控后台。还可以有效的释放连接。在connection close时,也就是归还connection, 关闭所有的statement,并且判断是否autocommit,如果不行,就rollback,并且设置true, 可以参考proxool的org.logicalcobwebs.proxool.ConnectionResetter类 connection pool把connection reset置回initial state。 dbcp的配置 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driverClassName}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/>
<property name="validationQuery"> <value>SELECT 1</value> </property> <property name="testOnBorrow"> <value>true</value> </property> </bean>
c3p0的配置, 注意是''driverClass' , 'jdbcUrl', 'user' , 'password'
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="jdbcUrl"> <value>jdbc:oracle:thin:@218.202.151.179:58580:ORA9I</value> </property> <property name="user"> <value>oa</value> </property> <property name="password"> <value>XXXX</value> </property> <property name="minPoolSize"> <value>15</value> </property> <property name="acquireIncrement"> <value>5</value> </property> <property name="maxPoolSize"> <value>25</value> </property>
或
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>${db.driverClass}</value> </property> <property name="jdbcUrl"> <value>${db.url}</value> </property> <!-- <property name="user"> <value>${db.user}</value> </property> <property name="password"> <value>${db.pass}</value> </property> --> <property name="properties"> <props> <prop key="c3p0.acquire_increment">5</prop> <prop key="c3p0.idle_test_period">100</prop> <prop key="c3p0.max_size">100</prop> <prop key="c3p0.max_statements">0</prop> <prop key="c3p0.min_size">10</prop> <prop key="user">${db.user}</prop> <prop key="password">${db.pass}</prop> </props> </property> </bean> xapool的配置 <bean id="dataSource" class="org.enhydra.jdbc.pool.StandardPoolDataSource" destroy-method="stopPool"> <constructor-arg index="0"> <bean class="org.enhydra.jdbc.standard.StandardConnectionPoolDa taSource"> <property name="driverName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost/dbname</value></property> </bean> </constructor-arg> <property name="user"><value>root</value></property> <property name="password"><value>mypass</value></property> <property name="minSize"><value>1</value></property> <property name="maxSize"><value>5</value></property> <property name="jdbcTestStmt"><value>select 1</value></property> </bean> c-jdbc的配置 <bean id="dataSource" class="org.objectweb.cjdbc.driver.DataSource"> <property name="url"><value>jdbc:cjdbc://127.0.0.1:25322/vdb?user=vuser</value></property> </bean>
weblogic的连接池解决办法:Test Reserved Connections: 如果选择了这个选项,服务器会在把连接提供给客户端之前 对其进行测试。 Test Created Connections: 如果选择了这个选项,就会在创建一个JDBC 连接之后和在把它添加到JDBC连接池中的可用连接列表之前,对该JDBC连接进行测试。
tomcat的jndi关于dbcp的配置:
<parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>com.sybase.jdbc2.jdbc.SybDriver</value> </parameter> <parameter> <name>url</name> <value>xyz</value> </parameter> <parameter> <name>username</name> <value>xyz</value> </parameter> <parameter> <name>password</name> <value>xyz</value> </parameter> <parameter> <name>maxActive</name> <value>5</value> </parameter> <parameter> <name>maxIdle</name> <value>5</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> <parameter> <name>removeAbandoned</name> <value>true</value> </parameter> <parameter> <name>validationQuery</name> <value>select count(*) from sometable where 1 = 0</value> </parameter> <parameter> <name>testOnBorrow</name> <value>true</value> </parameter> =================================================================
c3p0 连接池
Hibernate 配置文件主要用于配置数据库连接和Hibernate运行时所需要的各种属性(如,连接池,SQL方言,是否现实SQL日志等)。 Hibernate 同时支持 xml 格式的配置文件各传统的 properties 文件配置形式,这里采用 xml 。 配置文件名默认为 hibernate.cfg.xml(或 hibernage.properties),Hibernate在初始化期间自动在 classPath中寻找这个文件,并读取其中的配置信息,并加载。 以下是 hibernate.cfg.xml 文件(在项目 HibernateProject 的src 下放以下内容): <?xml version="1.0" encoding="GB2312"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd
">
<hibernate-configuration> <session-factory> <!-- 是否将运行期生成的SQL输出到日志以供调试 --> <property name="hibernate.show_sql"> true </property> <!-- SQL 方言--> <property name="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </property> <!-- 数据库用户 --> <property name="hibernate.connection.username"> sa </property> <!-- 数据库密码 --> <property name="hibernate.connection.password"> 123456 </property> <!-- 数据库 JDBC 驱动--> <property name="hibernate.connection.driver_class"> com.microsoft.jdbc.sqlserver.SQLServerDriver </property> <!-- 数据库 URL --> <property name="hibernate.connection.url"> jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hbdb </property> <!-- 事务管理类型 --> <!-- Hibernate 3 对包名做了修改 ( net.sf.hibernate => org.hibernate )--> <property name="hibernate.transaction.factory_class"> org.hibernate.transaction.JDBCTransactionFactory </property> <!-- c3p0 连接池 --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.max_size">2</property> <property name="hibernate.c3p0.min_size">2</property> <property name="hibernate.c3p0.timeout">50000</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.validate">false</property> <!-- 映射的配置文件,对应数据库表 KELA_STUDENT 的映射文件,在后面将看到这个文件的配置 --> <mapping resource="com/kela/hb/pojo/KelaStudent.hbm.xml"/> </session-factory> </hibernate-configuration>