TomCat连接池与JNDI

目录

一、理解JNDI

1.简介

2.作用范围

3.配置方法

二、为什么要使用连接池?

三、连接池的工作原理

配置连接池用到的参数

四、Tomcat中配置连接池

1.配置context.xml文件

2.配置web.xml文件

3.添加数据库驱动文件

4.使用lookup()方法获得数据源对象

五、JDBC和JNDI的区别

一、理解JNDI

   在我们学习连接池之前,先要了解一下什么是JNDI,因为TomCat配置连接池的数据源是要通过JNDI去配置的。

1.简介

  JNDI全称为 (java Naming and Directory Interface  java命名与目录接口),是一个目录服务的java API,为查找和访问各种命名和目录服务提供了通用、统一的接口。说白了,JDNI就是一个通过命名去访问资源或目录的规范,相当于map名对值。 

2.作用范围

JNDI可以访问的目录和服务有很多,等等,那这跟连接池有什么关系呢?我们知道JNDI可以访问资源、服务,那这代表他也可以访问数据库,所以我们要知道通过JNDI怎么访问数据库呢?我们下面一一揭晓。

3.配置方法

JNDI是作用于Tomcat中的,所以要在conf/context.xml里配置资源。具体配置下面细讲。

二、为什么要使用连接池?

   之前访问数据库大家因该都知道JDBC,通过JDBC去向数据库获取连接,但是每次都要创建连接,关闭连接,很消耗资源,比如很多用户并发访问这个页面,这样频繁的连接释放很有可能会导致数据库崩溃,效率低下,容易引发异常,那么针对这个问题,就需要连接池来解决了。

三、连接池的工作原理

 在程序启动时,连接池也启动了,但是在这之前连接池会跟数据库通信拿到连接,可以设置连接池的最大连接数,最小连接数,等待时间等。这样应用程序可以直接在连接池里获取连接,最后进行一个close归还,这样没连接上的用户有空隙可以连接归还了的,最大连接数的设置正好可以解决很多用户访问页面并发的问题,实现每个用户都和连接一一对应。

配置连接池用到的参数

   这些参数都是javax.sql.DataSource数据源底下的<Resource>元素,通过JDNI去设置,访问资源。

属性说明
name指定资源的JNDI名字
auth指定资源的管理者,他有两个Container和Application两个可选值,Container表示容器管理Resource(资源),Application表示由web应用程序管理资源。
type  指定资源所属的java类型
maxTotal从连接池分配的最大连接数,默认值为8,设置负数表示不受限制(最多有几个连接数)
mixIdle  连接池中处于空闲状态的最大连接数,默认值为8,设置负数表示不受限制。(最少有几个连接数)
max WaitMills当连接池没有连接时,等待获取连接的最大毫秒数,如果超出时间就会抛出异常,默认值为-1,表示可以无限等待。
username连接数据库的用户名
password连接数据库的密码
driverClassName  指定数据库的驱动程序
url        指定连接数据库的url

四、Tomcat中配置连接池

1.配置context.xml文件

    在Tomcat中找到conf包底下的context.xml文件,数据源需要在这个文件中配置。

//使用JNDI命名规范配置连接池的资源
<Context>

<Resource

  name="jdbc/数据库名"
 
  auth="Container"

  type="javax.sqlDataSource"

  maxTotal="100"

  maxIdle="30"

  maxWaitMills="10000"

  username="root"

  password="root"

  driverClassName="com.mysql.jdbc.Driver"
  
  url="jdbc:mysql://localhost:3306/数据库名?useSSL=false&amp;characterEncoding=utf8&amp;serverTimezone=UTC"
/>
</Context>

注意

1.连接池的数据库我使用的是Mysql的驱动包和数据库,你们更改的时候直接在配置文件改就可以,不需要重新编译执行。

2.如果连接的数据库少的话,可以不写最大最小和等待时间的连接数,因为他们都是有默认值的。

3.在配置文件中拼接参数时,要用&amp;来转义&。

2.配置web.xml文件

   我们将连接池配置好以后,当然要在web项目中引用啦,找到你的web项目底下的WEB-INF文件夹底下的web.xml文件。它是当前web的核心配置文件。

//引用JDNI数据源

 <resource-ref>
     <res-ref-name>jdbc/test</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
 </resource-ref>

注意

1. 数据源的引用标签是写在web-app标签中的。

2.它的引用顺序必须先是资源名称、类型、管理者。

3.添加数据库驱动文件

   大数人连接数据库时都记得添加数据库的驱动,但是这里我还是要说一下,因为少数人有可能会忘记,比如我,我们知道连接数据库时驱动去与java程序打交道,所以这个东西是必须的。  

最后啰嗦一句:

  只要向web项目中添加jar包,都要放到lib这个文件夹中,他是专门存放包的。

4.使用lookup()方法获得数据源对象

   通过上述配置,我们已经有了连接池,并且引用到了web程序中,那怎么去用它去连接池拿到连接呢?

 public Connection getConnection()
    {
        //JDNI的Context接口获取资源
        Connection connection=null;
        try {
             Context context=new InitialContext();
             DataSource dataSource =(DataSource) context.lookup("java:comp/env/myschool");
             connection= dataSource.getConnection();
        } catch (NamingException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //归还
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        return connection;
    }

解析

1. 获取资源连接最主要代码是在try中的三行,通过JDNI的Context接口调用loopup()去获取资源。

2.loopup方法就是寻找资源的一个方法,里面的前缀java:comp/env/ 是用来防止连接重名的,后面的myschool是数据库名。

切记切记!!!

    当引入DataSource时要注意它引入的包是不是sql,否则获取不到连接,因为他的类型就是sql.DataSource,最后进行close就会自动归还连接。

五、JDBC和JNDI的区别

工作方式不一样

JDBC:当它修改连接信息时,如用户名,程序会重新翻译并再次编译为.class文件,如果程序是java,就会将.class文件打包成jar包运行,否 是web程序时。会将.class文件打成war包运行,每次修改都要重新运行这一系列操作,因为是java代码。

JNDI : 当它去修改信息时,重启Tomcat就会将配置文件修改(因为连接池是在Tomcat中的)。

请求资源不一样

JDBC:通过java来获取连接的

JNDI: Tomcat配置文件中获取连接

功能范围不一样

JDBC: 只能用于获取连接数据库并执行sql语句

JNDI: 不仅可以获取连接,还可以通过名称获取文件的资源,配置资源等。

连接时的效率不一样

JDBC: 连接数量增多时,会相当消耗资源,甚至崩溃。

JNDI:  可以设置最大连接数,提前备好连接,效率高。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值