hibernate配置数据库连接池的三种方法
- 格式:doc
- 大小:28.00 KB
- 文档页数:4
hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
目录1.1Hibernate的数据库连接的系统配置技术 (2)1.1.1Hibernate系统的数据库连接配置 (2)1.1.2hibernate.cfg.xml配置文件 (7)1.1.3hibernate.cfg.xml文件中的各个标签的含义 (10)1.1.4采用hibernate.cfg.xml配置文件来配置Hibernate系统 (14)1.1.5Hibernate中的系统配置文件中的各个属性的说明 (17)1.1.6可编程方式实现Hibernate的系统配置 (27)1.1.7完整的程序代码示例 (31)1.1Hibernate的数据库连接的系统配置技术1.1.1Hibernate系统的数据库连接配置1、Hibernate系统的数据库连接的缺省配置由于Hibernate是为了能在各种不同环境下工作而设计的,因此存在着大量的配置参数。
幸运的是多数配置参数都有比较直观的默认值,并有随Hibernate一同分发的配置样例hibernate.properties(位于etc/)来展示各种配置选项。
我们所需做的仅仅是将这个样例文件复制到类路径(classpath)下做一些自定义的修改。
2、配置Hibernate系统的主要方式(1)Hibernate配置文件可以有两种格式Hibernate配置文件可以有两种格式●一种是hibernate.properties(默认文件名)●另一种是hibernate.cfg.xml(默认文件名)。
后者稍微方便一些,当增加*.hbm.xml映射文件的时候,我们可以直接在hibernate.cfg.xml 里面增加,而不必像hibernate.properties必须在初始化代码中加入。
Configuration hibernateConfiguration=new Configuration();hibernateConfiguration.addResource("Person.hbm.xml");hibernateConfiguration.addResource("Cat.hbm.xml");但不管怎么说,两种的配置项都是一样的这些配置文件包含了一系列属性及其属性值,Hibernate将根据这些属性来连接数据库。
数据库连接池的参数设置在进行数据库操作时,为了提高效率和性能,往往会使用数据库连接池。
数据库连接池是一种管理数据库连接的技术,它可以在应用程序启动时创建一定数量的数据库连接,并将这些连接保存在一个池中,供应用程序使用。
对于频繁进行数据库操作的应用程序来说,使用数据库连接池可以减少连接的创建和关闭的开销,提高数据库操作的效率。
数据库连接池的参数设置非常重要,不同的参数设置会对数据库连接池的性能和效果产生直接影响。
下面我将介绍一些常见的数据库连接池参数设置。
1. 初始连接数(InitialSize):指定连接池中初始化的连接数。
在应用程序启动时,连接池会创建这些连接并放入池中。
初始连接数的设置应根据应用程序的并发量和数据库的负载情况来确定,一般来说,初始连接数应该足够满足应用程序的并发需求,但也不能设置得过多,以免占用过多的系统资源。
2. 最小空闲连接数(MinIdle):指定连接池中保持的最小空闲连接数。
当应用程序不再使用连接时,连接池会将一部分连接保留在池中,以便下次使用。
最小空闲连接数的设置应根据应用程序的并发量和数据库的负载情况来确定。
如果设置得过小,可能导致连接池无法满足应用程序的并发需求;如果设置得过大,可能会浪费系统资源。
3. 最大空闲连接数(MaxIdle):指定连接池中保持的最大空闲连接数。
当连接池中的连接数量超过最大空闲连接数时,多余的连接会被关闭并从池中移除。
最大空闲连接数的设置应根据应用程序的并发量和数据库的负载情况来确定。
如果设置得过小,可能导致连接池无法满足应用程序的并发需求;如果设置得过大,可能会浪费系统资源。
4. 最大活动连接数(MaxActive):指定连接池中允许的最大活动连接数。
当连接池中的连接数量达到最大活动连接数时,新的连接请求会被阻塞,直到有连接被释放。
最大活动连接数的设置应根据应用程序的并发量和数据库的负载情况来确定。
如果设置得过小,可能导致连接池无法满足应用程序的并发需求;如果设置得过大,可能会导致数据库负载过高。
Hibernate的三种连接池设置C3P0、Proxool和DBCP一、Hibernate连接池配置:Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。
在配置连接池时需要注意的有三点:一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。
如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。
二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。
但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。
三、Hibernate2和Hibernate3的命名空间有所变化。
例如,配置C3P0时的provider_cla ss有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。
下面是Hibernate环境下几种常见的连接池配置:1.Hibernate默认连接池<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!—JDBC驱动程序--><property nam e="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 连接数据库的URL--><property nam e="connection.url">jdbc:m ysql://localhost:3306/schoolproject</property><property nam e="eUnicode">t rue</property><property nam e="connection.characterEncoding">UTF-8</property><!--连接的登录名--><property nam e="ername">root</property><!—登录密码--><property nam e="connection.password"></property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>2.C3P0连接配置<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!—JDBC驱动程序--><property nam e="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 连接数据库的URL--><property nam e="connection.url">jdbc:m ysql://localhost:3306/schoolproject</property><property nam e="eUnicode">t rue</property><property nam e="connection.characterEncoding">UTF-8</property><!--连接的登录名--><property nam e="ername">root</property><!--登录密码--><property nam e="connection.password"></property><!-- C3P0连接池设定--><property nam e="hibernate.connection.provider_class">org.hibernate.connectio n.C3P0ConnectionProvider</property><property nam e="hibernate.c3p0.m ax_size">20</property><property nam e="hibernate.c3p0.m in_size">5</property><property nam e="hibernate.c3p0.tim eout">120</property><property nam e="hibernate.c3p0.m ax_statem ents">100</property><property nam e="hibernate.c3p0.idle_test_period">120</property><property nam e="hibernate.c3p0.acquire_increment">2</property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>3.proxool连接池(1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be em bedded within your own application's.Anything outside the "proxool" tag is ignored. --><something-else-entirely><proxool><!--连接池的别名--><alias>DBPool</alias><!--proxool只能管理由自己产生的连接--><driver-url>jdbc:m ysql://localhost:3306/schoolproject?useUnicode=true&characterEnco ding=UTF8</driver-url><!—JDBC驱动程序--><driver-class>com.m ysql.jdbc.Driver</driver-class><driver-properties><property nam e="user" value="root"/><property nam e="password" value=""/></driver-properties><!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--><house-keeping-sleep-tim e>90000</house-keeping-sleep-tim e><!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--><maximu m-new-connections>20</maximum-new-connections><!-- 最少保持的空闲连接数--><prototype-count>5</prototype-count><!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--><maximu m-connection-count>100</maximu m-connection-count><!-- 最小连接数--><minimum-connection-count>10</minimu m-connection-count></proxool></something-else-entirely>(2)配置hibernate.cfg.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><property nam e="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property><property nam e="hibernate.proxool.pool_alias">DBPool</property><property nam e="hibernate.proxool.xml">proxoolconf.xml</property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>(1) hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool 连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息(2) hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名(3) hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。
JDBC开发回顾开发步骤1)注册驱动2)获得连接3)获得SQL执行对象4)执行SQL操作,获得结果集5)操作结果集6)释放资源示例代码普通的JDBC数据库连接使用DriverManager 来获取,每次向数据库建立连接的时候都要将Connection 加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。
需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。
这种方式将存在以下问题:1)、数据库的连接资源并没有得到很好的重复利用。
若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。
2)、对于每一次数据库连接,使用完后都得断开。
否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。
3)、无法控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
数据库连接池什么是数据库连接池?为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,无需每次操作都重新建立连接。
常用的数据库连接池1)、DBCPDBCP是Apache下独立的数据库连接池组件,在Tomcat中使用的连接池组件就是DBCP。
特点是包含基本功能且配置简单,没有连接池监控功能,稳定性尚可,但在大并发环境下稳定性有所下降,速度稍慢。
2)、c3p0c3p0是另外一个开源的连接池,在业界也是比较有名的,此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,此外不提供连接池监控。
3)、druidDRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。
Hibernate 中配置C3P0连接池Hibernate自带的连接池算法相当不成熟。
它只是为了让你快些上手,并不适合用于产品系统或性能测试中。
出于最佳性能和稳定性考虑你应该使用第三方的连接池。
只需要用特定连接池的设置替换hibernate.connection.pool_size即可。
这将关闭Hibernate自带的连接池。
例如,你可能会想用C3P0.C3P0是一个随Hibernate一同分发的开源的JDBC连接池,它位于lib目录下。
如果你设置了hibernate.c3p0.*相关的属性,Hibernate将使用C3P0ConnectionProvider来缓存JDBC连接。
如果你更原意使用Proxool,请参考发行包中的hibernate.properties并到Hibernate网站获取更多的信息。
这是一个使用C3P0的hibernate.properties样例文件(来自Hibernate包中etc目录下):############################## C3P0 Connection Pool###############################hibernate.c3p0.max_size 2#hibernate.c3p0.min_size 2#hibernate.c3p0.timeout 5000#hibernate.c3p0.max_statem ents 100#hibernate.c3p0.idle_test_period 3000#hibernate.c3p0.acquire_increment 2#hibernate.c3p0.validate false在hibernate.cfg.xml文件里面加入如下的配置:<!-- 最大连接数--><property name="hibernate.c3p0.max_size">20</property><!-- 最小连接数--><property name="hibernate.c3p0.min_size">5</property><!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒--><property name="hibernate.c3p0.timeout">120</property><!-- 最大的PreparedStatement的数量--><property name="hibernate.c3p0.max_statements">100</property><!-- 每隔120秒检查连接池里的空闲连接,单位是秒--><property name="hibernate.c3p0.idle_test_period">120</property><!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数--><property name="hibernate.c3p0.acquire_increment">2</property><!-- 每次都验证连接是否可用--><property name="hibernate.c3p0.validate">true</property>完整示例如下(hibernate.properties):hibernate.connection.driver_class =org.postgresql.Driverhibernate.connection.url= jdbc:postgresql://localhost/mydatabaseername = myuserhibernate.connection.password = secrethibernate.c3p0.min_size=5hibernate.c3p0.max_size=20hibernate.c3p0.timeout=1800hibernate.c3p0.max_statements=50hibernate.dialect =org.hibernate.dialect.PostgreSQLDialect。
数据库连接池的使用和配置方法一、引言在现代互联网时代,数据的存储和管理是不可或缺的重要组成部分。
而数据库作为数据存储和管理的底层技术,其性能的高效与否对于系统的运行速度和稳定性有着直接的影响。
而数据库连接池则是提高数据库性能的重要手段之一。
本文将介绍数据库连接池的基本概念、使用场景以及配置方法。
二、数据库连接池的概念1. 数据库连接池定义数据库连接池是一种管理和复用数据库连接对象的技术,它在应用程序启动时即预先创建多个数据库连接,并将这些连接保存在一个连接池中。
当应用程序需要与数据库进行交互时,可以从连接池中获取一个可用的数据库连接对象,并在使用完成后将其返回到连接池中供其他应用程序使用,以此有效地避免了频繁地创建与关闭数据库连接的开销。
2. 数据库连接池优势数据库连接池的使用带来了以下几个优势:- 提高系统性能:数据库连接的创建与关闭是一个开销较大的过程,使用连接池可避免频繁地创建与关闭连接,大大提高了系统的性能。
- 提升系统稳定性:连接池通过维护一定数量的可用连接,当系统并发请求增加时,可以提供足够的连接以满足需求,避免因连接不足而引发的系统崩溃等问题。
- 节省资源消耗:连接池可以复用数据库连接,避免了频繁地创建与关闭连接的资源消耗,减少了对系统资源的占用。
三、数据库连接池的使用场景数据库连接池适用于以下场景:1. 高并发访问:当多个并发请求同时要求与数据库进行交互时,数据库连接池可以提供足够的连接以满足需求,确保系统的稳定性和高效性。
2. 长连接业务场景:对于需要长时间持续使用数据库连接的业务,连接池可以避免频繁地创建与关闭连接,提高效率并减少资源消耗。
3. 分布式系统:对于分布式系统中的各个节点,数据库连接池可以提供统一的连接管理和资源分配,简化系统的架构和管理。
四、数据库连接池的配置方法下面将介绍数据库连接池的基本配置参数和配置方法。
1. 连接池大小配置连接池大小是连接池中可用连接的数量,可以根据系统的并发需求来设置。
Hibernate 连接池的三种配置方式:dbcp , c3p0 , proxoolURL的多种指定方式连接池监控在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在中,明确指出在实践中发现dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。
1 =================== C3P0 配置=============================Xml代码<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 配置事务实现方式--><property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property><!-- 配置JDBC里batch的大小--><property name="jdbc.batch_size">50</property><property name="e_second_level_cache">false</property><!-- 配置线程安全的session --><property name="current_session_context_class">thread</property><!-- 显示SQL --><property name="show_sql">true</property><property name="format_sql">true</property><!-- 配置数据库方言--><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><!-- 配置数据库连接--><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="ername">0804</property><property name="connection.password">0804</property><property name="connection.url">jdbc:oracle:thin:@192.168.0.200:1521:orcl</property><!-- 配置连接池--><property name="c3p0.max_size">2</property><property name="c3p0.min_size">2</property><property name="c3p0.timeout">5000</property><property name="c3p0.max_statements">100</property><property name="c3p0.idle_test_period">3000</property><property name="c3p0.acquire_increment">2</property><property name="c3p0.validate">false</property><!-- 指定hibernate管理的映射文件--><mapping resource="com/ket/ruan/so/entity/User.hbm.xml"/><mapping resource="com/ket/ruan/so/entity/Product.hbm.xml"/>。
JavawebHibernate如何与数据库链接java web添加structs特性后再添加Hibernate特性,这可以通过右键⼯程->my eclipse出现⼯具条选中相应的条⽬,添加相应的属性,添加完Hibernate后建⽴与数据库的链接,然后就可以进⾏反向了,讲⼀下建⽴数据库连接:在my eclipse中选中window->other perspective 打开DB browser,如下图:接下来在空⽩处右键,新建连接即可弹出如下对话框:接下来选择相应的Driver template⼀般和数据库有关,mysql⼀般选My sql connect;在Driver name处为链接命名,随便起,不重即可;在Connection URL处设置数据库链接,链接sql server格式如下:jdbc:sqlserver://<server_name>:<port>[;databaseName=<dbname>]⽰例:本机:jdbc:sqlserver://localhost:1433;databaseName=test远程:jdbc:sqlserver://111.111.7.13:1433;databaseName=test远程只需将localhost改为远程机器IP即可;sql server⼀般端⼝为1433;User name要同管理员分配给你的⼀样,密码也是,要对应;最后添加相应的数据库驱动包即可,点击test driver进⾏测试;产⽣如上对话框即测试成功;连接后,在DB browser处打开相应的表进⾏反向:反向时,右键点击相应的表,选中反向⼯程,弹出如下对话框:第⼀个红线出选择⼯程下的src,第⼆个红线选中提前分好的model包,第四个红线点击后如下图:java package选择dao包,class name命名:表名+Base(不强制)在下⼀步中选择native,如下:完成后finish即可;在Base类中将null给为HibernateSessionFactory.getSession(),再调整⼀下包就好以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Hibernate 配置详解(一)Hibernate的基本配置文件有两种:hibernate.cfg.xml和*.hbm.xml文件。
前者包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到Configuration和SessionFactory实例;后者包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping 节点被加载到Configuration和SessionFactory实例。
这两种文件信息包含了Hibernate的所有运行期参数。
下面我们用详细的例子来说明这两种文件的基本结构和内容。
一、hibernate.cfg.xml文件:<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:--> <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- 正文开始--><hibernate-configuration><!--下面是数据库的基本连接信息,对一个应用来说,设置一个session-factory节点就够了,除非我们中间使用了多个数据库--> <session-factory><!--数据库驱动信息--><propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><!--url信息--><propertyname="connection.url">jdbc:mysql://localhost:3306/webases</property><!--用户名--><property name="ername">root</property><!--密码--><property name="connection.password">274507</property><!--数据库方言信息--><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--指定Hibernate映射文件路径--><mapping resource="com/Hibernate/test_products.hbm.xml" /></session-factory></hibernate-configuration>。
<c3p0-config><default-config><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。
Default: 3 --><property name="acquireIncrement">3</property><!--定义在从数据库获取新连接失败后重复尝试的次数。
Default: 30 --><property name="acquireRetryAttempts">30</property><!--两次连接中间隔时间,单位毫秒。
Default: 1000 --><property name="acquireRetryDelay">1000</property><!--连接关闭时默认将所有未提交的操作回滚。
Default: false --> <property name="autoCommitOnClose">false</property><!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。
如果定义了这个参数那么属性preferredTestQuery将被忽略。
你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。
Default: null--><property name="automaticTestTable">Test</property><!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。
但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。
如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。
➢数据库连接池的概念(是什么,做什么用的,有什么好处)➢首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了。
➢以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放。
如果频繁的数据库操作,就会导致性能很低。
连接池的出现,为开发过程提供了一个很好的管理平台。
当程序中需要建立数据库连接时,只须从内存中取一个来用而不用新建。
同样,使用完毕后,只需放回内存即可。
而连接的建立、断开都有连接池自身来管理。
同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。
通过使用连接池,将大大提高程序效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
➢而Hibernate的出现把连接池的使用引入了一个新的利用方式,让你充分享受配置化给开发带来的便利。
1 C3P0 (以验证可用)只需在hibernate.cfg.xml中加入<property name="ername">omdssd_admin</property><property name="connection.password">omdssd_hskj</property><property name="connection.url">jdbc:oracle:thin:@10.142.1.138:1521:omds</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="format_sql">true</property><property name="show_sql">true</property><property name="myeclipse.connection.profile">oracle10g_112</property><property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><property name="hibernate.c3p0.min_size">5</property> //连接池中数据库连接的最小数目<property name="hibernate.c3p0.max_size">30</property> //连接池中数据库连接的最大数目<property name="hibernate.c3p0.time_out">1800</property> //设定数据库连接的过期时间,以秒为单位<property name="hibernate.c3p0.max_statement">50</property> //可以被缓存的PreparedStatement实例的最大数目。
缓存适量的PreparedStatement实例,能够大大提高Hibernate的性能。
<property name="hibernate.c3p0.idle_test_period">120</property>//在使数据库连接自动生效之前处于空闲状态的时间,以秒为单位<property name="hibernate.c3p0.acquire_increment">2</property><mapping resource="com/hs/model/CountZrlineDay.hbm.xml" /> ……………………………………..还有在classespath中加入c3p0-0.9.1.2.jar2 dbcp(hibernate3.0中,已经不支持dbcp)在hibernate.cfg.xml中加入<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/test</property><!-- 数据库用户名--><property name="ername">root</property><!-- 数据库密码--><property name="connection.password">123456</property><property name="dbcp.maxActive">100</property><property name="dbcp.whenExhaustedAction">1</property><property name="dbcp.maxWait">60000</property><property name="dbcp.maxIdle">10</property>还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.3 proxool在hibernate.cfg.xml中加入:<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="format_sql">true</property><property name="show_sql">true</property><property name="myeclipse.connection.profile">oracle10g_112</property><!-- 配置proxool数据库连接池 --><!-- 连接池的别名 --><property name="hibernate.proxool.pool_alias">Proxool_DB_Pool</property> <!-- 向Hibernate声明连接池的配置文件位置(和hibernate.cfg.xml放在一个目录下) --> <property name="hibernate.proxool.xml">ProxoolConf.xml</property><!-- 定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同的连接池有不同的加载类-->org.hibernate.connection.ProxoolConnectionProvider</property><!--为false,当hibernate开始被调用时,就会初始化proxool连接池,进行数据库连接等操作 --> <property name="hibernate.proxool.existing_pool">true</property><mapping resource="com/hs/model/LxZrLineTowerMinute2.hbm.xml" />……………….然后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. --><something-else-entirely><proxool><!-- 连接池别名 --><alias>Proxool_DB_Pool</alias><!--proxool只能管理由自己产生的连接--><driver-url>jdbc:oracle:thin:@10.142.50.112:1521:omds</driver-url><driver-class>oracle.jdbc.driver.OracleDriver</driver-class><driver-properties><property name="user" value="omdssd_admin"/><property name="password" value="omdssd_hskj"/></driver-properties><!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--><house-keeping-sleep-time>90000</house-keeping-sleep-time><!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--><maximum-new-connections>20</maximum-new-connections><!-- 最少保持的空闲连接数--><prototype-count>5</prototype-count><!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--><maximum-connection-count>100</maximum-connection-count><!-- 最小连接数--><minimum-connection-count>10</minimum-connection-count> </proxool></something-else-entirely>并在classespath中加入proxool-0.8.3.jar。