tomcat服务器配置jndi数据源

tomcat配置jndi

有全局配置和局部配置。大致的有以下几种配置方式:


jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称

访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。

         tomcat配置jndi有全局配置和局部配置。大致的有以下三种配置方式:

 

总结:
第一步:

将驱动程序(jar包)放到tomcat安装目录下的common\lib文件夹下

第二步:

第一种:局部配置

在Tomcat的webapps目录随便创建一个工程目录,例如test。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
		 <Context >  
		 <Resource name="jdbc/drp" 
			 auth="Container" 
			 type="javax.sql.DataSource" 
			 driverClassName="com.mysql.jdbc.Driver" 
			 url="jdbc:mysql://localhost:3306/drp" 
			 username="root" password="123456" 
			 maxActive="20" maxIdle="10" 
			 maxWait="10000"/>
		</Context>

附注如下:
Tomcat标准数据源资源工厂配置项如下:
* driverClassName - 所使用的JDBC驱动类全称。
* maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
* maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
* maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
* password - 传给JDBC驱动的数据库密码。
* url - 传给JDBC驱动的连接URL。
* user - 传给JDBC驱动的数据库用户名。
* validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
* 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。


jdbc/drp是数据源的名称(随意写,要和web.xml文件中 <res-ref-name>jdbc/drp</res-ref-name> 一样即可),
其他的参数按照自己的实际情况进行修改,例如数据库的名称、账号、密码。

第三步:

在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下: 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
version="2.4"> 
 
    <resource-ref> 
        <description>DB Connection</description> 
        <res-ref-name>jdbc/drp</res-ref-name> 
        <res-type>javax.sql.DataSource</res-type> 
        <res-auth>Container</res-auth> 
    </resource-ref> 
</web-app

说明:
<resource-ref>
<descrtiption>引用资源说明</descrtiption>
<res-ref-name>引用资源的JNDI名</res-ref-name>
<res-type>引用资源的类名</res-type>
<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->
</resource-ref>
第四步:
写个jsp,试一下吧!(不能再普通java类里面测试,必须启动容器在jsp中调用)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  <%
  	Connection conn =null;
	  try
	  {
	   //初始化查找命名空间
	   Context ctx = new InitialContext(); 
	   //InitialContext ctx = new InitialContext();亦可 
	   //找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名
	   DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/drp");
	   //取出连接
	    conn = ds.getConnection();
	   out.println(conn);
	   out.println(conn.isClosed());
	   out.println("</br>");
	   
		System.out.println("connection pool connected !!");   
	  } catch (NamingException e) {
	   System.out.println(e.getMessage());
	  } catch (SQLException e) {
	   e.printStackTrace();
	  }finally
	  {
	   //注意不是关闭,是放回连接池.
	   conn.close();
	  }
  
  %>
    This is my JSP page. <br>
  </body>
</html>

我成功了!
以下是配置JNDI的其他方法,个人不建议使用,因为修改服务器的
server.xml和web.xml,如果有一点错误,你的容器就会崩溃~

注:连接数据源的方法还有很多,在这里我简要说之:


比如说第二步还可以这么做:

第二种 局部配置 :在/tomcat/conf/Catalina/localhost(或其它主机名)/中添加以
虚拟目录名称(你的工程名)命名的XML文件来配置context.
比如我的主机下有个目录dbpool其地址为tomcat/webapps/test我可以这样来配置这个上下文:
在tomcat/conf/Catalina/localhost/目录下创建test.xml文件,内容和上面一样.

第三种 局部配置:还可以:
在/tomcat/conf/server.xml中<host></host>标签之间添加

 <Context path="/test" docBase="/test">  
		 <Resource name="jdbc/drp" 
			 auth="Container" 
			 type="javax.sql.DataSource" 
			 driverClassName="com.mysql.jdbc.Driver" 
			 url="jdbc:mysql://localhost:3306/drp" 
			 username="root" password="123456" 
			 maxActive="20" maxIdle="10" 
			 maxWait="10000"/>
		</Context> 

其中path是你的工程路径(相对或绝对亦可),其中docBase="test"说明,此主机已经指向到webapps目录下了,回头
来看test这个上下文,它实际目录是位于webapps的目录下的,所以
在Context中我们可以将docBase直接设置为test了。如果它在webapps/dbpool/test下,则设置为dbpool/test就可以了。

附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
Java应用程式开发者透过使用 JNDI,在naming和 directory方面的应用上就有了共通的准则.

还有一种全局配置是在

1)在tomcat的conf文件夹下的context.xml配置文件中加入:

 <Resource name="jdbc/drp" 
			 auth="Container" 
			 type="javax.sql.DataSource" 
			 driverClassName="com.mysql.jdbc.Driver" 
			 url="jdbc:mysql://localhost:3306/drp" 
			 username="root" password="123456" 
			 maxActive="20" maxIdle="10" 
			 maxWait="10000"/>

其他不变
总结:如果要配置局部的话,推荐使用第一种方式,这样不依赖tomcat了。但是还是推荐使用最后一种方式好,虽然依赖tomat,但是是全局的,而且可以配置多个。对于以后切换使用方便。
在项目的web.xml中添加的资源引用可有可无。
--------------------- 
原文:https://blog.csdn.net/pengchenghui/article/details/77885511 

也可以看另一篇文章(JNDI在Spring和tomcat下的使用

https://www.cnblogs.com/wuyanshun/p/6763162.html

主要配置如下:

在context.xml的根节点Context里加入Resource配置(tomcat的conf文件夹下的context.xml)

<Resource name="jdbc/mmcDB"       //指定的jndi名称,会用于spring数据源bean的配置和ResourceLink的配置
                 auth="Container"//认证方式,一般默认这个
                 type="javax.sql.DataSource"   //数据源床型,使用标准的javax.sql.DataSource
                 driverClassName="com.mysql.jdbc.Driver"    //JDBC驱动器 
                 url="jdbc:mysql://localhost:3306/test" //数据库URL地址             
                 username="test"     //数据库用户名
                 password="test"   //数据库密码
                 maxIdle="40"   //最大的空闲连接数
                 maxWait="4000" //当池的数据库连接已经被占用的时候,最大等待时间
                 maxActive="250" //连接池当中最大的数据库连接
                 removeAbandoned="true" 
                 removeAbandonedTimeout="180"
                 logAbandoned="true" //被丢弃的数据库连接是否做记录,以便跟踪
                 factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" />

在spring主配置文件中引用数据源:

方法一:

<bean id="testDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName">
          <value>java:comp/env/jdbc/mmcDB</value>
     </property>
</bean>
或者:
<bean id="testDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName">
          <value>jdbc/mmcDB</value>
     </property>
     <property name="resourceRef">
          <value>true</value>
     </property>
</bean>


方法二:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/mmcDB" />


 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值