J2EE课程设计《技术应用指导》——JDBC和数据库连接池技术及应用(第3部分).doc
《J2EE课程设计《技术应用指导》——JDBC和数据库连接池技术及应用(第3部分).doc》由会员分享,可在线阅读,更多相关《J2EE课程设计《技术应用指导》——JDBC和数据库连接池技术及应用(第3部分).doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章JDBC和数据库连接池技术及应用(第3/3部分)1.1 在Hibernate和Spring框架中应用数据库连接池Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,从而使用面向对象编程方式来操纵关系型的数据库。在Hibeinate框架中提供有多种数据库的连接方案,比如JDBC的直接连接和基于Servlet容器的JNDI数据库连接池的DataSource连接等。Spring框架为应用系统的开发者提供了一个统一使用的数据源的解决方案,通过控制反转的机制用外部配置文件来指定所使用的数据源。而且Spring框架还提供有对Hibernate框架的包装功能,
2、直接可以通过配置的方式为Hibernate框架提供基于DataSource的数据库连接提供有更加灵活的数据库连接池的应用方案。1.1.1 在Hibernate中应用基于JNDI的数据库连接池1、在Hibernate框架中的数据库连接实现方案(1)在Hibernate框架中所支持的数据库连接实现方案在Hibernate框架中提供有下面的三种不同的数据库连接实现方案,读者在课程设计的项目开发中,可以根据项目的需要合理地选择其中的一种连接实现方案:1) 基于JDBC API的数据库直接连接;2) 基于容器的JNDI数据库连接池的DataSource连接;3) 第三方的数据库连接池的DataSourc
3、e实现的连接。(2)选择不同的数据库连接的提供者实现类Hibernate框架提供一个统一接口ConnectionProvider,同时还内置有对ConnectionProvider接口的多种不同形式的实现类。1) DriverManagerConnectionProvider:代表由Hibernate提供的默认的数据库连接池;2) C3P0ConnectionProvider:代表C3P0连接池;3) ProxoolConnectionProvider:代表Proxool连接池;4) DBCPConnectionProvider:代表DBCP连接池;5) DatasourceConnectio
4、nProvider:代表在受管理环境中由容器提供的数据源。开发人员只需要在Hibernate框架中的配置文件中通过connection.provider_class属性名指定所需要的连接提供者的实现类。下面为一个配置示例: 2、在Hibernate框架中应用系统内带的数据库连接池的实现类类是在Hibernate系统中内带的数据库连接池的实现类,并且该类实现了ConnectionProvider接口。它主要是应用开发人员所提供的JDBC驱动程序以及与目标数据库有关的各种连接参数来连接目标数据库、或者使用连接池的方式来连接目标数据库。Hibernate框架的配置文件主要用于配置数据库连接和Hibe
5、rnate系统程序在运行时所需要的各种工作属性的定义如连接池、SQL方言和是否打印SQL语句等。下面的【例3-7】中的配置文件为在某个项目中应用Hibernate框架系统本身内带的数据库连接池,在配置文件的配置内容的示例。【例3-7】应用Hibernate框架系统内带的数据库连接池的配置示例 jdbc:mysql:/localhost:3306/webbank root root但读者要注意,只有在项目中没有使用额外的连接池配置方案时,Hibernate框架才会使用它的系统库中自带的对javax.sql.DataSource接口的一个默认连接池的实现类也就是DriverManagerConne
6、ctionProvider类。但用Hibernate框架中自带的连接池的性能不高,而且还存在一定的缺陷(Bug)。因此Hibernate框架的官方资料中推荐开发人员使用C3P0或Proxool连接池请见下图3.5中所示的Hibernate框架系统程序在启动时的状态提示不建议将默认连接池的实现类应用在产品使用环境中。图3.5 Hibernate框架系统程序提示不建议应用在产品使用环境中状态截图3、在Hibernate框架中应用基于容器的JNDI数据库连接池的连接实现方案尽管在Hibernate框架中内带有自己的连接池的实现,但它只适用开发过程中,而不适用于应用系统在实际应用或对应用系统进行性能测
7、试等的应用环境中。因此,应该要替换Hibernate框架中内带的连接池的具体实现。(1)J2EE应用服务器容器都提供有JNDI数据库连接池的实现支持在J2EE应用服务的技术规范中定义了JNDI数据库连接池的实现接口,各个应用服务器厂商在实现自己的应用服务器软件时(如Tomcat、Weblogic和JBoss等)都提供有对JNDI数据库连接池的实现支持应用JNDI数据库连接池可以独立于数据库系统、并且高效和安全连接因为直接在应用服务器主机中创建出数据库连接,能够降低网络连接的开销,并能够控制连接数目而避免出现系统的访问超载。(2)在Hibernate框架中应用基于容器的JNDI数据库连接池的配置
8、示例下面的【例3-8】中的代码示例说明如何在Hibernate框架中应用基于容器的JNDI数据库连接池的配置实现,其中通过名称为“connection.datasource”的属性定义JNDI数据源的名字,请见【例3-8】示例中的黑体标识的部分但要带某个应用服务器的JNDI的限定名,Tomcat服务器的JNDI的限定名为“java:comp/env”。【例3-8】应用基于Tomcat容器的JNDI数据库连接池的配置示例 java:comp/env/jdbc/datasource true 请读者注意,如果需要应用容器的JNDI数据库连接池,则首先要在该应用服务器的系统管理程序中配置出指定名称的
9、JNDI数据源。1.1.2 在Hibernate框架中应用C3P0数据库连接池1、在Hibernate框架中内带有对C3P0连接池的技术支持(1)在Hibernate框架系统包中也内带有C3P0的系统库文件C3P0也是一个开源的JDBC连接池的技术实现包括实现了JDBC2、JDBC3扩展规范中的DataSources接口,并且在随Hibernate框架一同分发的系统包中也提供有与C3P0有关的系统库文件请见下图3.6所示的Hibernate3.3版的系统库的目录结构局部截图。图3.6 在Hibernate的系统包中也提供有与C3P0有关的系统库文件(2)在网站中提供有C3P0系统库和技术帮助文
10、档当然,读者也可以在 :/图3.7 网站中对C3P0的介绍文字的页面截图(3)在项目中添加C3P0系统库文件为了能够在项目中应用C3P0数据库连接池,首先需要将下载的C3P0系统库文件添加到应用系统中的WEB-INF/lib目录中。请见右图3.8所示的操作结果截图。图3.8在项目中添加C3P0系统库文件2、在Hibernate框架中应用C3P0数据库连接池的配置示例【例3-9】在Hibernate中应用C3P0数据库连接池的配置示例 jdbc:mysql:/localhost:3306/bbsdatabase root root 5 20 500 100 3000 2 true 3、与C3P0
11、数据库连接池配置有关的各种工作参数例3-9中的黑体部分的配置项目为与C3P0数据库连接池有关的各种工作参数,下面对这些工作参数的含义加以说明:1) c3p0.min_size:在连接池中可用的数据库连接的最少数目;2) c3p0.max_size:在连接池中所有数据库连接的最大数目;3) c3p0.timeout:以毫秒为单位,如果空闲连接的空闲时间超过了c3p0.timeout的设定值,该连接就会被删除;4) c3p0.max_statements:可以被缓存的JDBC语句PreparedStatement对象的最大数目,设置适量的值可以提高Hibernate在数据访问时的性能;5) c3p
12、0.idle_test_period:在使数据库连接自动生效之前处于空闲状态的时间,以毫秒为单位;6) c3p0.acquire_increment:当连接池中的连接用完时,C3P0一次性需要新建出的连接数;7) c3p0.validate:每次是否都需要验证连接是否可用;8) acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30; 9) acquireRetryDelay:两次连接中间隔时间(单位为毫秒),默认为1000; 10) autoCommitOnClose:连接关闭时默认将所有未提交的操作回滚,默认为false; 11) autom
13、aticTestTable:C3P0将建一张名为Test的空表,并使用其自带的查询语句进行测试。但开发人员不能在这张Test表上进行任何操作它只保留给C3P0测试所用,默认为null; 12) breakAfterAcquireFailure:获取连接失败将会引起所有等待获取连接的线程抛出异常。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认为 false;13) checkoutTimeout:当连接池用完时,如果还有程序调用getConnection()方法后等待获取新的数据库连接的时间(单位为毫秒),超时后将抛出SQLException,如设为0则无限期等待
14、。默认为0;14)15) idleConnectionTestPeriod:隔多少秒时间将自动检查连接池中的空闲连接,默认为0表示不检查;16) initialPoolSize:初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3;17) maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0;18) maxPoolSize:连接池中保留的最大连接数。默认为15;19) maxStatementsPerConnection:连接池内单个连接所拥有的最大缓存Statement数。默认为0;20) propertyCy
15、cle: 用户修改系统配置参数执行前最多等待的秒数。默认为300;21) testConnectionOnCheckout:设为true,则在每个连接提交时都将校验其有效性。默认为false; 22) testConnectionOnCheckin:设为true,则在取得连接的同时将校验连接的有效性。默认为false。4、在J2SE的应用程序开发中以编程方式应用C3P0数据库连接池C3P0数据库连接池的实现不仅可以应用在基于Hibernate框架的Web应用系统的开发中,也可以在J2SE的应用程序开发中以编程方式应用C3P0数据库连接池请见下面的【例3-10】中的代码示例,该连接池的属性设置类
16、同于【例3-9】中的示例的相同效果。【例3-10】在应用程序开发中以编程方式应用C3P0的代码实现示例packpublic class UserInfoDAOImple ComboPooledDataSource c3p0DataSource=null;public UserInfoDAOImple() c3p0DataSource=new ComboPooledDataSource(); try catch (PropertyVetoException e) e.printStackTrace();c3p0DataSource.setJdbcUrl(jdbc:mysql:/localhost
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 技术应用指导 J2EE 课程设计 技术 应用 指导 JDBC 数据库连接 部分
限制150内