如何在java里获取hibernate连接池最大连接数和当前连接数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java里获取hibernate连接池最大连接数和当前连接数相关的知识,希望对你有一定的参考价值。

1、获取当前连接数:(DataSource)ctx.lookup("java:comp/env/j***");返回的值类型是BasicDataSource,BasicDataSource类中的getNumActive()方法可以得到当前正在使用的连接数。所以可以(BasicDataSource)ctx.lookup("java:comp/env/j***"),然后得到正在使用的连接数。
2、tomcat目录lib下,有一个包tomcat-dbcp.jar,BasicDataSource这个类就在这个包中BasicDataSource有两个,引入如下正确的
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
3、context.xml的配置:
<Resource name="j***" auth="Application" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/****" username="****" password="****" maxIdle="0" maxWait="5" maxActive="5"/>
4、获取hibernate连接池最大连接数XML配置

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">100</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
4、注:****请换成自己的配置
参考技术A 通过调试可以发现,(DataSource)ctx.lookup("java:comp/env/j***");返回的值类型是BasicDataSource,BasicDataSource类中的getNumActive()方法可以得到当前正在使用的连接数。

所以可以(BasicDataSource)ctx.lookup("java:comp/env/j***"),然后得到正在使用的连接数。

tomcat目录lib下,有一个包tomcat-dbcp.jar,BasicDataSource这个类就在这个包中

BasicDataSource有两个,引入如下正确的
import org.apache.tomcat.dbcp.dbcp.BasicDataSource; //正确
import org.apache.commons.dbcp.BasicDataSource; //错误
参考技术B 通过调试可以发现,(DataSource)ctx.lookup("java:comp/env/j***");返回的值类型是BasicDataSource,BasicDataSource类中的getNumActive()方法可以得到当前正在使用的连接数。

所以可以(BasicDataSource)ctx.lookup("java:comp/env/j***"),然后得到正在使用的连接数。

tomcat目录lib下,有一个包tomcat-dbcp.jar,BasicDataSource这个类就在这个包中

BasicDataSource有两个,引入如下正确的
import org.apache.tomcat.dbcp.dbcp.BasicDataSource; //正确
import org.apache.commons.dbcp.BasicDataSource; //错误本回答被提问者和网友采纳
参考技术C 通过调试可以发现,(DataSource)ctx.lookup("java:comp/env/j***");返回的值类型是BasicDataSource,BasicDataSource类中的getNumActive()方法可以得到当前正在使用的连接数。

所以可以(BasicDataSource)ctx.lookup("java:comp/env/j***"),然后得到正在使用的连接数。

tomcat目录lib下,有一个包tomcat-dbcp.jar,BasicDataSource这个类就在这个包中

BasicDataSource有两个,引入如下正确的
import org.apache.tomcat.dbcp.dbcp.BasicDataSource; //正确
import org.apache.commons.dbcp.BasicDataSource; //错误
参考技术D 这个实在配置文件中设置的

Hibernate不能实时获取MySQL数据库的更新

近期项目中使用到了Hibernate,但每次数据库记录有更新后。用hibernate无法查找到更新后的数据。网上查找了很多教程。终于发现通过更改hibernate的默认连接池能够解决。

通过使用c3p0连接池,替换掉hibernate的默认连接池后。就能够查找到MySQL更新后的数据了。

详细改动方法例如以下:

在hibernate.cfg.xml配置文件里,添加下面内容:

 <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
                <property name="hibernate.c3p0.max_size">20</property>  <!-- 在连接池中可用数据库连接的最大数目-->
                <property name="hibernate.c3p0.min_size">5</property>  <!-- 在连接池中可用数据库连接的最小数目-->
                <property name="hibernate.c3p0.max_statements">100</property>
                <property name="hibernate.c3p0.idle_test_period">120</property>
                <property name="hibernate.c3p0.acquire_increment">1</property>
                <property name="c3p0.testConnectionOnCheckout">true</property>
                <property name="c3p0.idleConnectionTestPeriod">18000</property>
                <property name="c3p0.maxIdleTime">25000</property>

附上c3p0的jar包,下载地址:http://download.csdn.net/detail/until_v/8149191


以上是关于如何在java里获取hibernate连接池最大连接数和当前连接数的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate不能实时获取MySQL数据库的更新

我在hibernate里配置的数据类型为java。util.Date,数据库连接的是oracle,创建表时老生成的是datetime

如何在基于 JAVA 的 spring config 中配置 Hibernate Db 连接设置

在IIS7IIS7.5中应用程序池最优配置方案

hibernate将connection放进threadlocal里实现数据库连接池

java反射机制动态获取hibernate懒加载对象