在企业级开发过程中,一定会使用数据源产品,使用数据库连接池来管理和调度与数据库的连接。不能需要与数据库连接了就创建一个连接,不需要就销毁一个连接,这样会造成资源的极大浪费。
在hibernate中使用c3p0数据源。
1.导入jar包:
hibernate-release-4.3.11.Final\lib\optional\c3p0\*.jar
2.配置c3p0数据源:
数据库连接池的最大连接数
<property name="c3p0.max_size">10</property>
数据库连接池的最小连接数
<property name="c3p0.min_size">5</property>
当数据库连接池连接耗尽时,一次获取的连接数
<property name="c3p0.acquire_increment">3</property>
数据库连接池中连接对象在多长时间没有被使用过后销毁
<property name="c3p0.timeout">1000</property>
连接池检测线程检测所有连接是否超时的频率,比较连接对象最后一次使 用时间和当前时间的时间差和timeout对比,来决定是否销毁此连接对象
<property name="c3p0.idle_test_period">2000</property>
缓存预处理指令的数量
<property name="c3p0.max_statements">10</property>
数据库连接池技术的优点
(1)资源重用:由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。
(2)更快的系统反应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间
(3)新的资源分配手段对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置实现某一应用最大可用数据库连接数的限制避免某一应用独占所有的数据库资源.
(4)统一的连接管理,避免数据库连接泄露在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露。
PS: 总结 :
1.连接池的好处是不必每次连接都新建一个连接,可以直接取池中取,节约内存资源;
2.使用配置文件,代替原来的jdbc硬编码的形式,复用性更强,而且可以在其中配置连接池的相关信息
3.获取当前路径下的文件,可以使用
Properties c3p0Pro = new Properties();
//加载配置文件,注意此处是以流的形式返回,C3P0ConnentionProvider是类名
c3p0Pro.load(C3P0ConnentionProvider.class.getResourceAsStream("/c3p0.properties"));
4.刚开始的时候,不是很深刻理解arraylist的操作,注意直接打印输出arraylist的值,它只会返回他所在的包及路径,如果要取到其中的值,必须遍历