设为首页 收藏本站
查看: 824|回复: 0

[经验分享] Tomcat 6 JNDI数据源详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-6 12:47:32 | 显示全部楼层 |阅读模式
  数据库连接池这个概念应该都不陌生,在Java中连接池也就是数据库的连接池,它是一种采用连接复用的思想避免多次连接造成资源的浪费机制。
  最常见的连接池就是DBCP和C30P了,在tomcat中默认使用的DBCP的连接池,在Hibernate中则默认使用的是C30P。他们的区别对于使用者来说最明显的就是,默认情况下DBCP不提供空闲连接的释放,需要手动开启。
  下面介绍下Tomcat中数据连接池的配置及使用。

DSC0000.jpg
  

介绍
  本篇依赖一个概念——JNDI,可以参考前面的博客:JNDI资源详解。
  对于JNDI,可以简单理解成Tomcat中的资源池,通过一些特有的名字与特定的资源相对应,类似一个map,可以简单的通过名字获取到该资源。
DSC0001.jpg
  那么本篇中JNDI数据源就是通过配置一个数据源的资源,在应用中通过该名称获取到数据库连接,进行操作。这样就省去了每次连接数据库的步骤。

连接池原理
  连接池的概念,应该都不陌生了。部分内容可以参考:几个主流的连接池
  这里简单说明下,如果单独在应用使用连接池,可能只是在应用运行时创建连接池。而tomcat配置数据源可以在tomcat容器启动时就初始化连接池,停止tomcat时才释放资源,其部署的应用可以根据JNDI的声明,在应用中共享使用该资源。
  因此一个是应用中的连接池(即一个应用中不同的业务使用该连接池,比如注册新用户与购买商品),一个可以扩大到多应用的连接池,具体使用的还要看业务需求。
  
  另外,tomcat中默认使用的DBCP连接池,其jar包位于CATALINA_HOME/lib下,tomcat-dbcp.jar。
   需要注意的是,默认情况下dbcp不会去释放空闲的连接。比如,我们在编码时,拿到一个连接执行业务操作,但是没有进行释放。此时,DBCP连接池不会放回到空闲队列中。如果再有新的连接,会分配其他的连接。当连接数目过大时,就会造成连接的阻塞。
  可以通过配置某些属性来自动回收连接,首先设置removeAbandoned="true"开启回收,然后设置removeAbandonedTimeout="300"设置连接的时间,超过该时间就会自动收回。
  具体内容可以参考:DBCP文档

Mysql案例
  按照下面几个步骤:
    1 放置mysql驱动:可以到这里下载
    2 创建数据库插入数据
    3 配置JNDI资源(context.xml以及web.xml)
    4 创建JSP验证结果
  
    1 放置驱动
  在tomcat根目录下的Lib中放置mysql驱动。
DSC0002.jpg
    2 创建数据库表并添加数据
  可以参考下面的SQL脚本:



/*
SQLyog v4.05
Host - 4.1.11-nt : Database - test
*********************************************************************
Server version : 4.1.11-nt
*/

create database if not exists `test`;
USE `test`;
/*Table structure for table `test`.`stu` */
drop table if exists `test`.`stu`;
CREATE TABLE `stu` (
`id` int(11) NOT NULL default '0',
`name` char(1) default NULL,
`age` int(11) default NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*Data for the table `test`.`stu` */
insert into `test`.`stu` values (0,'x',26),(1,'z',27),(2,'w',25);
    3 配置JNDI资源
  首先在context.xml中添加




  其中username为你的用户名,password是密码。
  maxActive指定最大的连接数,maxIdle指定最大的空闲连接数(即没有连接时,保存多少连接),maxWait指定最大的等待连接数。
  然后在web.xml中配置指定的资源名称(不是必须的)



  
DB Connection
jdbc/TestDB
javax.sql.DataSource
Container

    4 创建JSP页面,输出信息
  按照下面的代码创建,并释放连接:








Insert title here


Results



  最后的执行结果:
DSC0003.jpg

其他的配置
  其他的配置如Oracle和PostgreSQL仅仅是需要的数据库驱动和创建的JNDI名称不同:
  例如,在oracle中,context.xml中配置如下:




  在PostgreSQL中配置如下:




  使用方式都是差不多的。

参考
  【1】几种主流的连接池:http://developer.iyunv.com/art/201006/207768.htm
  【2】DBCP官方文档:http://commons.apache.org/proper/commons-dbcp/configuration.html
  【3】Tomcat JNDI Database:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94831-1-1.html 上篇帖子: Comet学习笔记(一)Tomcat与Comet 下篇帖子: Tomcat 5源码分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表