1.JNDI的诞生及简介简介

1)服务器数据源配置的诞生

  1. JDBC阶段:
    一开始是使用JDBC来连接操作数据库的:
    在Java开发中,使用JDBC操作数据库的四个步骤如下:

    ①加载数据库驱动程序(Class.forName("数据库驱动类");)
    ②连接数据库(Connection con = DriverManager.getConnection();)
    ③操作数据库(PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)
    ④关闭数据库,释放连接(con.close();)

  2. 所有的用户都需要经过此四步进行操作,但是这四步之中有三步(①加载数据库驱动程序、②连接数据库、④关闭数据库,释放连接)对所有人都是一样的,而所有人只有在操作数据库上是不一样,那么这就造成了性能的损耗。
    那么最好的做法是,准备出一个空间,此空间里专门保存着全部的数据库连接,以后用户用数据库操作的时候不用再重新加载驱动、连接数据库之类的,而直接从此空间中取走连接,关闭的时候直接把连接放回到此空间之中。
    而这个空间就是连接池

  3. 但是连接池的是有会有以下疑虑:

    1、 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用。
    2、 如果连接已经满了,则必须打开新的连接,供更多用户使用。
    3、 如果一个服务器就只能有100个连接,那么如果有第101个人过来呢?应该等待其他用户释放连接
    4、 如果一个用户等待时间太长了,则应该告诉用户,操作是失败的。

  4. 如果直接用程序实现以上功能,则会比较麻烦。
    所以在Tomcat 4.1.27之后,在服务器上就直接增加了数据源的配置选项,直接在服务器上配置好数据源连接池即可。在J2EE服务器上保存着一个数据库的多个连接。每一个连接通过DataSource可以找到。DataSource被绑定在了JNDI树上(为每一个DataSource提供一个名字)客户端通过名称找到在JNDI树上绑定的DataSource,再由DataSource找到一个连接。

  5. 示意图如下:

     
    00042JNDI学习1-01.jpg
  6. 网上流传的图:

     
    00042JNDI学习1-02.jpg
  7. 那么在以后的操作中,除了数据库的连接方式不一样之外,其他的所有操作都一样,只是关闭的时候不是彻底地关闭数据库,而是把数据库的连接放回到连接池中去。

2)JNDI的简介及优点:

  1. JNDI的定义:
    上面知道了JNDI的作用,JNDI的定义也就很容易理解了:
    JNDI是Java命名与文件夹接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之中的一个。
    简单的理解,区别于JDBC,就是:
    jdbc是java去找数据库驱动,jndi是通过你的服务器配置(如Tomcat)的配置文件context来找数据库驱动~
  2. 现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。(web容器就是Tomcat等服务器充当的)
  3. 为什么使用了连接池还要用JNDI:

    为了数据库资源的管理,在容器中配置一个数据库连接池,使用JNDI 来管理
    这样容器中运行多个服务的时候,每个服务只需添加一个jndi的名称就可以连接到数据库了
    如果不使用jndi的方式,直接在项目中配置数据库连接池,那么每个项目需要配置一次,如果更改数据库地址时,
    每个项目的数据库连接方式都要更改,比较麻烦,使用jndi的话,直接更改一下jndi里面的数据库连接池的配置就可以了,方便一些。

  4. 一般来说如果目标客户有专业的应用服务器,比如 WebSphere,WebLogic,我们就不需要在代码中配置使用特定的 dbcp 或其它的连接池了。只使用JNDI就可以了。

作者:菜鸟kenshine
链接:https://www.jianshu.com/p/de936f8ce3a9
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

JNDI Tomcat的更多相关文章

  1. springboot+jndi+tomcat配置多数据源

    1.在application.properties中,添加jndi配置,如下图 2.新建dataSourceConfig类 3.dataSourceConfig类详细代码,这里只贴出其中一个,多个数据 ...

  2. JNDI+Tomcat配置数据源的两种方式

    非全局jndi配置步骤 :此种配置方式不需要在server.xml中配置数据源,而只在tomcat/conf/Catalina/localhost下的启动配置中配置即可.注意红色字体名称必须和相同. ...

  3. 容器配置jndi Tomcat为例

    context.xml 文件 <Resource name=" password="spsj" type="javax.sql.DataSource&qu ...

  4. Jndi使用好处,与简单实例【Tomcat】

    JNDI学习总结(一)——JNDI数据源的配置 一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动 ...

  5. Springmvc +JNDI 在Tomcat下 配置数据源(转)

    一.             简介 jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务 ...

  6. JNDI学习总结(一)——JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...

  7. SPRING+JNDI+C3P0 in tomcat6

    Tomcat 中Jndi是使用Tomcat自带的连接池,由于客户要求,抛弃Tomcat自带的连接池.使用c3p0 .经过几个小时调试,解决方案如下: 环境:Tomcat 6 下面来看Jndi 与 c3 ...

  8. JNDI在server.xml中的配置(全局和局部的)

    总结: 全局就是在数据源server.xml中配置,然后通过和项目名相同的xml来进行映射.对所有的项目都起作用.那个项目需要就在对应的tomcat下配置一个与项目名相同的xml映射文件. 局部的就是 ...

  9. Tomcat configuration DataSource

    1. configuration MySql Connection DataSource 原理介绍 java 调用 Tomcat 中的 ConnectionPool 通过Context 中去查找  j ...

随机推荐

  1. 希尔排序Shell sort

    希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第一块希尔排序介绍 准备待排数组[6 2 4 1 ...

  2. c# Stream to File的知识点

    个人倾向使用File.WriteAllByte写入文件: //Stream to File MemoryStream ms=...Stream; ms.Position = ; byte[] buff ...

  3. log4net 性能测试

    1.执行事务:20260 次 写日志:        耗时11.59分 不写日志:    耗时11.55分 异步日志:    耗时12.49分 (个人电脑,.net 线程池调用线程写日志可能比主线程直 ...

  4. bzoj4695 最假女选手

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4695 [题解] SegmentTree beats!(见jiry_2论文/营员交流) 考虑只 ...

  5. JQGrid 导出Excel 获取筛选条件

    需求描述:页面加载后,进行相关数据搜索,要求点击导出按钮后  下载Excel文件. 思路:希望在点击[导出Excel]按钮时,获取到表格搜索时的filters内容. 在百度.api.jqgrid.js ...

  6. spring cloud config 详解

    Spring Cloud 为开发人员提供了一系列的工具来快速构建分布式系统的通用模型 .例如:配置管理.服务发现.断路由.智能路由.微代理.控制总线.一次性Token.全局锁.决策竞选.分布式sess ...

  7. [转]python os模块 常用命令

    python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()——判断现在正在实用的平台,Window ...

  8. python科学计算整理

    网站: http://bokeh.pydata.org/gallery.html

  9. C基础 一个可以改变linux的函数getch

    引言  -  getch简述 引用老的TC版本getch说明. (文章介绍点有点窄,  应用点都是一些恐龙游戏时代的开发细节) #include <conio.h> /* * 立即从客户端 ...

  10. ==和equals()方法的区别

    ==和equals()方法的区别 这是一道经典的面试题,但是很多人对其一直很困惑,最近刚好复习了他们两者的区别,现总结如下: 一.==:两端可以存放不同的数据     1.放基本数据类型:根据基本数据 ...