2019独角兽企业重金招聘Python工程师标准>>> hot3.png

proxool 是一个高效易用的数据库连接池库,目前最新版本是 Proxool 0.9.0RC3
可以在这里下载 http://proxool.sourceforge.net/
在 hibernate 中,通过简单配置,就可以使用 proxool。
先看看 proxool 的一个配置实例(本文使用 mysql, 读者可以根据需要改为其它数据库,比如 oracle 之类的)
文件名为 proxool-snake.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely><proxool><alias>snake</alias><driver-url>jdbc:mysql://localhost:3306/snake?useUnicode=true&amp;characterEncoding=gbk&amp;autoReconnect=true</driver-url><driver-class>com.mysql.jdbc.Driver</driver-class><driver-properties><property name="user" value="java"/><property name="password" value="mixed"/></driver-properties><maximum-connection-count>4</maximum-connection-count><minimum-connection-count>2</minimum-connection-count><house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql><statistics>15m,1h,1d</statistics></proxool>
</something-else-entirely>

大概解析一下:

alias:自定义的一个名称,通过此名称与 hibernate 关联;

driver-url, driver-class:数据库连接串和 driver 的信息;

maximum-connection-count, minimum-connection-count:最大、最小连接数;

现在看看 hibernate 的配置文件

文件名为 hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration><!-- a SessionFactory instance listed as /jndi/name [name="java:hibernate/SessionFactory"] --><session-factory><!-- cache configuration --><property name="hibernate.cache.provider_class">org.hibernate.cache.TreeCacheProvider</property><!-- driver configuration --><property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property><!-- properties --><property name="statement_cache.size">25</property><property name="jdbc.fetch_size">50</property><property name="jdbc.batch_size">50</property><property name="show_sql">true</property><!-- enable reconnect to database for a long time session --><property name="connection.autoReconnect">true</property><property name="connection.autoReconnectForPools">true</property><property name="connection.is-connection-validation-required">true</property><!--  Proxool Connection Pool  --><!-- Properties for external configuration of Proxool --><property name="hibernate.proxool.pool_alias">snake</property><property name="hibernate.proxool.existing_pool">false</property><property name="hibernate.proxool.xml">proxool-snake.xml</property>  <!-- mapping files --><mapping resource="UserInfo.hbm.xml"/><mapping resource="PlayerInfo.hbm.xml"/><mapping resource="ReadInfo.hbm.xml"/></session-factory>
</hibernate-configuration>

大概解析一下:

hibernate.proxool.pool_alias:即 proxool 中设置的 alias;

hibernate.proxool.existing_pool:此值设为 false,当 hibernate 开始被调用时,就会初始化 proxool,进行数据库连接等操作,这样最省事;

hibernate.proxool.xml:proxool 配置文件的名字,此例中是 proxool-snake.xml

配置文件编辑完成后,需要放到 CLASSPATH 路径中,迟些我会另外再写文章介绍通过 build.xml 来实现。

接下来我介绍一种从网上学习的,使用 hibernate 的方法。就是通过 HibernateUtil 来取得 管理和取得 session。以下是代码

HibernateUtil.java

package mixed.snake.util; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil
{private static Log log = LogFactory.getLog(HibernateUtil.class);public static final ThreadLocal<Session> local = new ThreadLocal<Session>();private static final SessionFactory sessionFactory; static{try{sessionFactory = new Configuration().configure().buildSessionFactory();}catch (HibernateException e){log.error("catch exception when configure hibernate: ", e); throw new RuntimeException("Configuration problem: "+ e.getMessage(), e);}} public static Session currentSession() throws HibernateException{Session session = local.get();if (session == null){session = sessionFactory.openSession();local.set(session);}return session;} public static void closeSession() throws HibernateException{Session session = local.get();local.set(null);if (session != null){session.close();}} public static void lightup(){log.debug("HibernateUtil.lightup() : activating hibernate.");}
}

hmm.. 怎么来使用这个 HibernateUtil 呢?

我的建议是:

对于 app 程序,

在初始化时 调用 HibernateUtil.lightup(); 以触发 hibernate 和 proxool 的初始化;

在程序内部,调用 HibernateUtil.currentSession() 取得 session 引用;

在程序释放时,调用 HibernateUtil.closeSession() 释放 session;

而对于 web 程序,以 struts 为例,可以这样使用,

写一个 PlugIn,在 init 时,调用 HibernateUtil.lightup();

同样,在应用中,调用 HibernateUtil.currentSession() 取得 session 引用;

最后是 session 的释放,一个技巧是通过 filter 来实现。

web.xml 中配置 hibernateFilter

<!-- hibernate filter configuration --><filter><filter-name>hibernateFilter</filter-name><filter-class>mixed.filter.HibernateFilter</filter-class></filter><filter-mapping><filter-name>hibernateFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

HibernateFilter 代码

package mixed.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException; import mixed.snake.util.HibernateUtil; public class HibernateFilter implements Filter
{ private static final Log log = LogFactory.getLog(HibernateFilter.class); public HibernateFilter(){super();} public void destroy(){} public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException{ try{chain.doFilter(request, response);}finally{try{HibernateUtil.closeSession();}catch (HibernateException e){log.error("catch exception:", e);} }} public void init(FilterConfig config) throws ServletException{}
}

以上就基本上实现了一种较为合理的 hibernate 应用方式了。

转载于:https://my.oschina.net/u/853145/blog/93456

在 hibernate 中使用 proxool 数据库连接池相关推荐

  1. 【张小平工作日志】DBCP、c3p0、Druid、Proxool数据库连接池比较

    定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问 ...

  2. proxool数据库连接池用法

    今天给大家介绍一种新的数据连接池实现方式--proxool数据库连接池,这是一个健壮.易用的连接池.以下通过一个Demo说明一下怎样使用: 项目结构例如以下: DBLink.java文件里的代码: p ...

  3. 如何在Tomcat中设置JNDI数据库连接池-Spring教程示例

    在Spring和Tomcat中设置JNDI数据库连接池非常容易. Tomcat服务器文档提供了有关如何在Tomcat 5.6或7中设置连接池的足够信息.在这里,我们将结合使用Tomcat 7和Spri ...

  4. spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池

    Druid是Java语言中最好的数据库连接池,这话不是我说的,是Druid官方文档自己这样描述的,这是何等的自信! 连接池的作用,跟线程池的作用大同小异,都是为了减少频繁的创建销毁连接IO,提升性能. ...

  5. Hibernate配置数据源,数据库连接池

    来源:http://lihengwei453848.blog.163.com/blog/static/36866173200922262811669/ 连接池概念:      首先,我们还是老套的讲讲 ...

  6. Hibernate中配置C3P0连接池

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转自:h ...

  7. Tomcat中配置MySQL数据库连接池

    Web开发中与数据库的连接是必不可少的,而数据库连接池技术很好的优化了动态页与数据库的连接,相比单个连接数据库连接池节省了很大的资源.用一个通俗的比喻:如果一个人洗澡需花一桶水,那一百个人就要花一百桶 ...

  8. ADO.NET中SQL Server数据库连接池

    实际上,大多数应用程序仅使用一个或几个不同的连接配置. 这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭. 为了使打开的连接成本最低,ADO.NET 使用称为连接池的优化方法. 连接池减少 ...

  9. Java中Semaphore(信号量) 数据库连接池

    计数信号量用来控制同时访问某个特定资源的操作数或同时执行某个指定操作的数量 A counting semaphore.Conceptually, a semaphore maintains a set ...

  10. ado.net mysql 连接池_ADO.NET中SQL Server数据库连接池

    实际上,大多数应用程序仅使用一个或几个不同的连接配置. 这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭. 为了使打开的连接成本最低,ADO.NET 使用称为连接池的优化方法. 连接池减少 ...

最新文章

  1. 计算机软件uml,计算机软件——UML旅游管理系统
  2. JavaScript实用小技巧
  3. 在Android Studio进行“简单配置”单元测试(Android Junit)
  4. skiplist 跳表(2)-----细心学习
  5. Tosca new project Repository as MS SQL Server
  6. 用虚拟机玩游戏的方法!! 开3D加速!
  7. 小学英语口语测试软件,最新小学英语口语测试题(四年级)
  8. 【转发分享】基于51单片机摩尔斯电码收发控制设计-基于51单片机智能恒温控制系统-基于51单片机霍尔测速直流电机设计-51单片机和MAX1898的智能手机充电器设计-基于51单片机的智能指纹考勤系统
  9. 贵州安顺:红色基因激活初心密码 为民服务谱写秀丽篇章
  10. (转)如何动手打造属于自己的智能家居
  11. 重要公告|Moonriver成功续约Kusama平行链插槽租赁期
  12. 水利水电工程有学计算机吗,为什么说千万别学水利水电工程 原因有哪些
  13. 【COMSOL】在结构力学中使用自定义外部材料模型 · Mazars 损伤模型
  14. JAVA//JAVA基本程序设计架构
  15. 腾讯云主机linux(centos7)服务器基本操作和安装日志
  16. 如何在Ubuntu 20.04上使用X2Go设置远程桌面
  17. 架构设计(5)—架构愿景分析
  18. 搜索引擎优化-黑帽技术
  19. mysql稳定性_MySQL的稳定性
  20. 计算并探究图像原图、旋转、添加噪声的相似度

热门文章

  1. numpy.ndarray size changed, may indicate binary incompatibil
  2. sklearn——model_selection——knn手写识别系统+iris分类
  3. keras中无法用save保存模型的问题
  4. 朴素贝叶斯:拉普拉斯修正
  5. 消息服务器mq集群出现假死,排查tomcat项目假死原因的简单方法
  6. 倒计时 5 天!Apache Flink Meetup · 北京站,1.13 新版本 x 互娱实践分享的开发者盛筵!...
  7. HttpClient 设置不当引发的一次雪崩
  8. Dubbo 是如何控制并发数和限流的?
  9. OpenGL ES总结(二)OpenGL坐标变换之平移及旋转
  10. SuperIndicator开源库源码分析