您当前的位置: 首页 > 

科技D人生

暂无认证

  • 0浏览

    0关注

    1550博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JNDI学习总结(2)——JNDI数据源的配置

科技D人生 发布时间:2016-01-05 14:00:06 ,浏览量:0

一、数据源的由来

  在Java开发中,使用JDBC操作数据库的四个步骤如下:

      ①加载数据库驱动程序(Class.forName("数据库驱动类");)       ②连接数据库(Connection con  = DriverManager.getConnection();)       ③操作数据库(PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)       ④关闭数据库,释放连接(con.close();)   也就是说,所有的用户都需要经过此四步进行操作,但是这四步之中有三步(①加载数据库驱动程序、②连接数据库、④关闭数据库,释放连接)对所有人都是一样的,而所有人只有在操作数据库上是不一样,那么这就造成了性能的损耗。   那么最好的做法是,准备出一个空间,此空间里专门保存着全部的数据库连接,以后用户用数据库操作的时候不用再重新加载驱动、连接数据库之类的,而直接从此空间中取走连接,关闭的时候直接把连接放回到此空间之中。   那么此空间就可以称为连接池(保存所有的数据库连接),但是如果要想实现此空间的话,则必须有一个问题要考虑?       1、 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用。       2、 如果连接已经满了,则必须打开新的连接,供更多用户使用。       3、 如果一个服务器就只能有100个连接,那么如果有第101个人过来呢?应该等待其他用户释放连接       4、 如果一个用户等待时间太长了,则应该告诉用户,操作是失败的。    如果直接用程序实现以上功能,则会比较麻烦,所以在Tomcat 4.1.27之后,在服务器上就直接增加了数据源的配置选项,直接在服务器上配置好数据源连接池即可。在J2EE服务器上保存着一个数据库的多个连接。每一个连接通过DataSource可以找到。DataSource被绑定在了JNDI树上(为每一个DataSource提供一个名字)客户端通过名称找到在JNDI树上绑定的DataSource,再由DataSource找到一个连接。如下图所示:
  
  那么在以后的操作中,除了数据库的连接方式不一样之外,其他的所有操作都一样,只是关闭的时候不是彻底地关闭数据库,而是把数据库的连接放回到连接池中去。
  如果要想使用数据源的配置,则必须配置虚拟目录,因为此配置是在虚拟目录之上起作用的。需要注意的是,如果要想完成以上的功能,在Tomcat服务器上一定要有各个数据库的驱动程序。
二、JNDI+Tomcat配置数据源的两种方式 2.1、全局jndi配置

  此种配置需要在server.xml中配置数据源,具体的配置步骤如下:

  1、在tomcat服务器的lib目录下加入数据库连接的驱动jar包

  

  2、修改tomcat服务器的conf目录下server.xml配置文件

  

  打开server.xml配置文件,可以看到里面自带的一个全局JNDI配置,如下图所示:

  

  编辑server.xml文件,添加全局JNDI数据源配置,配置如下:

复制代码
 1 
 4   
 5     
 8     
13 
26 
27 
38 
39 
40 
51 
52 
53 
64 
65   
复制代码

  经过以上的两个步骤,全局JNDI数据源就配置好了,在上述的server.xml文件中,分别配置了Oracle、MySQL、SQLServer这三种数据库的全局JNDI数据源。

2.2、全局jndi数据源测试

  1、创建一个JNDI测试项目JNDITest,在web.xml中添加JNDI配置的资源引用

  

  web.xml的配置如下:

复制代码
 1 
 2 
 7   
 8     index.jsp
 9   
10   
11   
17    
18   
19       Oracle DB Connection
20       oracleDataSource
21       javax.sql.DataSource
22       Container
23  
24   
25   
26   
27       MySQL DB Connection
28       mysqlDataSource
29       javax.sql.DataSource
30       Container
31   
32   
33   
34   
35       SQLServer DB Connection
36       sqlserverDataSource
37       javax.sql.DataSource
38       Container
39   
40   
41 
复制代码

  2、映射JNDITest项目的虚拟目录

  在tomcat的\conf\Catalina\localhost下(没有目录就新建)创建一个xml文件,文件名必须和项目名相同,测试JNDI数据源的web项目的项目名称是:JNDITest,所以xml文件的命名就叫JNDITest.xml,如下图所示:

  

  编辑JNDITest.xml,配置如下:

复制代码
 1 
 2 
 6 
 7 
 8     
 9     
10     
11     
12     
13     
14 
复制代码

  3、测试从JNDI数据源获取数据库连接

  配置完数据源连接池之后,就可以按照以下的步骤进行访问:

    • 初始化名称查找上下文     • 通过JNDI名称找到DataSource     • 通过DataSource取得一个连接     • 操作数据库     • 关闭数据库,关闭的时候是将连接放回到连接池之中

  jsp测试页面代码如下:

复制代码
  1 
  2 
  3 
  4 DOCTYPE HTML>
  5 
  6   
  7     JNDI数据源测试
  8   
  9   
 10   
 11         
 42         
 43         
 74         
 75         
106     
107 
复制代码

  运行结果如下:

  

  除了可以在Jsp页面中编写java代码测试JNDI数据源连接之外,还有一种比较简单的方式就是使用JSTL标签库提供的sql标签进行测试,测试代码如下:

复制代码
 1 
 2 
 3 
 4 
 5 DOCTYPE HTML>
 6 
 7   
 8     JNDI数据源连接测试
 9   
10   
11   
12           Oracle JNDI数据源测试
13           
14         
15             
16             SELECT * FROM LEAD_OAMS_DBSOURCES
17         
18         
19         
20             
21             ${row.RESOURCEID}---${row.DBSOURCE_NAME}---${row.DBSOURCE_TYPE}
22         
23         
24         MySQL JNDI数据源测试
25         
26         
27             
28              select * from ld_user
29         
30         
31         
32             
33             ${row.id}---${row.username}---${row.password}
34         
35         
36         SQLServer JNDI数据源测试
37         
38         
39             
40             select * from t_demo
41         
42         
43         
44             
45             ${row.id}---${row.time}
46         
47   
48 
复制代码

  运行结果如下:

  

2.3、非全局jndi配置

  非全局JNDI数据源是针对某一个Web项目配置的数据源,具体的配置步骤如下:

   1、在tomcat服务器的lib目录下加入数据库连接的驱动jar包

   2、针对具体的web项目映射虚拟目录,然后在虚拟目录映射的配置文件中配置JNDI数据源

  还是以上面的JNDITest项目为例子进行说明

  在tomcat目录下的\conf\Catalina\localhost目录下创建一个JNDITest.xml文件,如下图所示:

  

  编辑JNDITest.xml文件,添加对JNDITest项目的虚拟目录的映射和JNDI数据源的配置

复制代码
 1 
 2 
 6 
 7 
 8 
21 
22 
33 
34 
35 
46 
47 
48 
59 
复制代码

   3、在web项目的web.xml文件中引用配置好的JNDI数据源

复制代码
 1  
 7    
 8   
 9       Oracle DB Connection
10       oracleDataSource
11       javax.sql.DataSource
12       Container
13  
14   
15   
16   
17       MySQL DB Connection
18       mysqlDataSource
19       javax.sql.DataSource
20       Container
21   
22   
23   
24   
25       SQLServer DB Connection
26       sqlserverDataSource
27       javax.sql.DataSource
28       Container
29   
复制代码

  经过以上3个步骤,针对具体web项目配置的JNDI数据源就算是配置好了。具体的测试和上述测试全局JNDI数据源的方式是一样的!

关注
打赏
1662604032
查看更多评论
立即登录/注册

微信扫码登录

0.0507s