Hibernate中怎么配置dbcp连接池

61次阅读
没有评论

共计 7105 个字符,预计需要花费 18 分钟才能阅读完成。

这篇文章主要介绍“Hibernate 中怎么配置 dbcp 连接池”的相关知识,丸趣 TV 小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Hibernate 中怎么配置 dbcp 连接池”文章能帮助大家解决问题。

1. 获取 DBCP jar

要将 DBCP 与 Hibernate 集成,您需要 commons-dbcp.jar 和 commons-pool-1.5.4.jar。

文件:pom.xml

project ... 
 repositories 
 repository 
 id JBoss repository /id 
 url http://repository.jboss.org/nexus/content/groups/public/ /url 
 /repository 
 /repositories 
 dependencies 
 dependency 
 groupId org.hibernate /groupId 
 artifactId hibernate-core /artifactId 
 version 3.6.3.Final /version 
 /dependency 
 dependency 
 groupId commons-dbcp /groupId 
 artifactId commons-dbcp /artifactId 
 version 1.4 /version 
 /dependency 
 /dependencies /project

2.DBCPConnectionProvider

要将 DBCP 与 Hibernate 集成,您需要创建一个“DBCPConnectionProvider”类。

文件:DBCPConnectionProvider.java

package com.mkyong.util;import java.io.PrintWriter;import java.io.StringWriter;import java.sql.Connection;import java.sql.SQLException;import java.util.Iterator;import java.util.Map;import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource;import org.apache.commons.dbcp.BasicDataSourceFactory;import org.hibernate.HibernateException;import org.hibernate.cfg.Environment;import org.hibernate.connection.ConnectionProvider;import org.hibernate.connection.ConnectionProviderFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class DBCPConnectionProvider implements ConnectionProvider { private static final Logger log = LoggerFactory
 .getLogger(DBCPConnectionProvider.class); private static final String PREFIX =  hibernate.dbcp. private BasicDataSource ds; // Old Environment property for backward-compatibility (property removed in
 // Hibernate3)
 private static final String DBCP_PS_MAXACTIVE =  hibernate.dbcp.ps.maxActive // Property doesn t exists in Hibernate2
 private static final String AUTOCOMMIT =  hibernate.connection.autocommit public void configure(Properties props) throws HibernateException { try {
 log.debug( Configure DBCPConnectionProvider // DBCP properties used to create the BasicDataSource
 Properties dbcpProperties = new Properties(); // DriverClass   url
 String jdbcDriverClass = props.getProperty(Environment.DRIVER);
 String jdbcUrl = props.getProperty(Environment.URL);
 dbcpProperties.put(driverClassName , jdbcDriverClass);
 dbcpProperties.put(url , jdbcUrl); // Username / password
 String username = props.getProperty(Environment.USER);
 String password = props.getProperty(Environment.PASS);
 dbcpProperties.put(username , username);
 dbcpProperties.put(password , password); // Isolation level
 String isolationLevel = props.getProperty(Environment.ISOLATION); if ((isolationLevel != null)
  (isolationLevel.trim().length()   0)) {
 dbcpProperties.put( defaultTransactionIsolation ,
 isolationLevel);
 } // Turn off autocommit (unless autocommit property is set)
 String autocommit = props.getProperty(AUTOCOMMIT); if ((autocommit != null)   (autocommit.trim().length()   0)) {dbcpProperties.put( defaultAutoCommit , autocommit);
 } else {
 dbcpProperties.put( defaultAutoCommit ,
 String.valueOf(Boolean.FALSE));
 } // Pool size
 String poolSize = props.getProperty(Environment.POOL_SIZE); if ((poolSize != null)   (poolSize.trim().length()   0)
  (Integer.parseInt(poolSize)   0)) {dbcpProperties.put( maxActive , poolSize);
 } // Copy all  driver  properties into  connectionProperties 
 Properties driverProps = ConnectionProviderFactory
 .getConnectionProperties(props); if (driverProps.size()   0) {StringBuffer connectionProperties = new StringBuffer(); for (Iterator iter = driverProps.entrySet().iterator(); iter
 .hasNext();) {Map.Entry entry = (Map.Entry) iter.next();
 String key = (String) entry.getKey();
 String value = (String) entry.getValue();
 connectionProperties.append(key).append(=).append(value); if (iter.hasNext()) {
 connectionProperties.append( 
 dbcpProperties.put( connectionProperties ,
 connectionProperties.toString());
 } // Copy all DBCP properties removing the prefix
 for (Iterator iter = props.entrySet().iterator(); iter.hasNext();) {Map.Entry entry = (Map.Entry) iter.next();
 String key = (String) entry.getKey(); if (key.startsWith(PREFIX)) {String property = key.substring(PREFIX.length());
 String value = (String) entry.getValue();
 dbcpProperties.put(property, value);
 } // Backward-compatibility
 if (props.getProperty(DBCP_PS_MAXACTIVE) != null) {
 dbcpProperties.put( poolPreparedStatements ,
 String.valueOf(Boolean.TRUE));
 dbcpProperties.put( maxOpenPreparedStatements ,
 props.getProperty(DBCP_PS_MAXACTIVE));
 } // Some debug info
 if (log.isDebugEnabled()) {StringWriter sw = new StringWriter();
 dbcpProperties.list(new PrintWriter(sw, true));
 log.debug(sw.toString());
 } // Let the factory create the pool
 ds = (BasicDataSource) BasicDataSourceFactory
 .createDataSource(dbcpProperties); // The BasicDataSource has lazy initialization
 // borrowing a connection will start the DataSource
 // and make sure it is configured correctly.
 Connection conn = ds.getConnection();
 conn.close(); // Log pool statistics before continuing.
 logStatistics();} catch (Exception e) {
 String message =  Could not create a DBCP pool 
 log.error(message, e); if (ds != null) { try {ds.close();
 } catch (Exception e2) { // ignore
 ds = null;
 } throw new HibernateException(message, e);
 log.debug(Configure DBCPConnectionProvider complete} public Connection getConnection() throws SQLException {
 Connection conn = null; try {conn = ds.getConnection();
 } finally {logStatistics();
 } return conn;
 } public void closeConnection(Connection conn) throws SQLException { try {conn.close();
 } finally {logStatistics();
 } public void close() throws HibernateException {
 log.debug( Close DBCPConnectionProvider 
 logStatistics(); try { if (ds != null) {ds.close();
 ds = null;
 } else {log.warn( Cannot close DBCP pool (not initialized) 
 } catch (Exception e) {throw new HibernateException( Could not close DBCP pool , e);
 log.debug(Close DBCPConnectionProvider complete} protected void logStatistics() { if (log.isInfoEnabled()) {log.info( active:   + ds.getNumActive() +   (max:  
 + ds.getMaxActive() + )   +  idle:   + ds.getNumIdle()
 +  (max:   + ds.getMaxIdle() +  ) 
 } public boolean supportsAggressiveRelease() { return false;}

3. 在 hibernate.cfg.xml 中配置 DBCP

现在,链接您的“DBCPConnectionProvider”并在“hibernate.cfg.xml”中定义 DBCP 属性,例如:

文件: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-configuration
  session-factory
  property name= hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver /property
  property name= hibernate.connection.url jdbc:oracle:thin:@localhost:1521:MKYONG /property
  property name= hibernate.connection.username mkyong /property
  property name= hibernate.connection.password password /property
  property name= hibernate.dialect org.hibernate.dialect.Oracle10gDialect /property
  property name= hibernate.default_schema MKYONG /property
  property name= show_sql true /property  
  property name= hibernate.connection.provider_class
com.mkyong.util.DBCPConnectionProvider  /property
  property name= hibernate.dbcp.initialSize 8 /property
  property name= hibernate.dbcp.maxActive 20 /property
  property name= hibernate.dbcp.maxIdle 20 /property
  property name= hibernate.dbcp.minIdle 0 /property  
  mapping  >4. 运行,输出

完成,运行它并查看以下输出:

关于“Hibernate 中怎么配置 dbcp 连接池”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注丸趣 TV 行业资讯频道,丸趣 TV 小编每天都会为大家更新不同的知识点。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计7105字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)