`

tomca中配置jndi数据源的方法

 
阅读更多

准备条件:

1、jdk1.6(或jdk1.7)

2、tomcat6(或tomcat7)

3、数据库连接驱动,以mysql为例:mysql-connector-java-5.1.18.jar

 

配置jndi的步骤:

先来看非全局的配置方法(只有当前应用可以访问该jndi)

1、将数据连接驱动jar包拷贝到tomcat6下的lib目录下;

2、打开tomcat6下的conf目录下context.xml文件;

3、在<Context>......</Context>节点里添加如下代码: 

 

<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
	
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
    
    <!--JNDI配置-->
    <Resource name="jdbc/rpepTest"
    	auth="Container"
    	type="javax.sql.DataSource"
    	maxActive="100"
    	maxIdle="30"
    	maxWait="5000"
    	username="testuser"
    	password="testpass"
    	driverClassName="com.mysql.jdbc.Driver"
    	url="jdbc:mysql://10.111.222.333:3306/rpep?zeroDateTimeBehavior=convertToNull"/>

</Context>

 

各参数说明: 

name="jdbc/rpepTest" -------jndi的名称

auth="Container" ------- jndi的认证方式,可选Container或Application

type="javax.sql.DataSource" -------  jndi所使用的类

maxActive="100" ------- 最大活跃的连接数

maxIdle="30" ------- 最大空闲连接数

maxWait="5000" ------- 最大等待时间

username="testuser" ------- 数据库用户名

password="testpass" ------- 数据库密码

driverClassName="com.mysql.jdbc.Driver" ------- 数据库驱动

url="jdbc:mysql://10.111.222.333:3306/rpep?zeroDateTimeBehavior=convertToNull" ------- 数据库连接URL

 

4、在程序中使用jndi:

4.1.新建一个web工程test(注意jndi需要在tomcat容器里使用);

4.2 修改test工程的web.xml,添加如下代码:

 

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <resource-ref>
      <description>MySQL DataSource</description>
      <res-ref-name>jdbc/rpepTest</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
  
</web-app>
 

 

4.3 编写测试类:

package com.mycom.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 * 测试JNDI配置和连接
 * 
 * @author guweiqiang
 */
public class TestJNDI {

	private Connection getConnection() throws NamingException {
		Connection conn = null;
		String jndi = "jdbc/rpepTest";
		Context initContext = new InitialContext();
		Context envContext = (Context) initContext.lookup("java:/comp/env");// 固定,不需要修改
		DataSource ds = (DataSource) envContext.lookup(jndi);
		if (ds != null) {
			try {
				conn = ds.getConnection();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		return conn;
	}

	public List<String> selectById(int id) {
		Connection con = null;
		try {
			con = getConnection();
		} catch (NamingException e1) {
			e1.printStackTrace();
		}

		List<String> list = new ArrayList<String>();
		String sql = "select * from rpep_activity where id=?";
		try {
			PreparedStatement pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, id);
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				list.add(rs.getString(1));
				list.add(rs.getString(2));
				list.add(rs.getString(3));
				System.out.println(rs.getString(1));
				System.out.println(rs.getString(2));
				System.out.println(rs.getString(3));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}

	public static void main(String[] args) {
		new TestJNDI().selectById(100051);
	}

}

 4.4.再编写一个测试jsp:

<%@page import="com.mycom.test.TestJNDI"%> 
<%
	new TestJNDI().selectById(100051);
%>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

 

启动tomcat,访问:http://127.0.0.1:8080/test/

测试结果:

100051

5.1测试

5.6测试

 

 

再来看全局的配置方法(所有应用都可以访问该jndi

与非全局的配置基本相同,只是具体的数据源配置信息时配置在conf下的server.xml文件里,然后在context.xml里进行引用。

1. 同样需要将mysql驱动连接的jar拷贝到tomcat的lib目录下;

2. 打开tomcat的conf目录下的server.xml文件,将数据源配置添加到<GlobalNamingResources></GlobalNamingResources>节点下:

 

  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
              
    <!--JNDI配置-->
    <Resource name="jdbc/rpepTest"
    	auth="Container"
    	type="javax.sql.DataSource"
    	maxActive="100"
    	maxIdle="30"
    	maxWait="5000"
    	username="testuser"
    	password="testpass"
    	driverClassName="com.mysql.jdbc.Driver"
    	url="jdbc:mysql://10.111.222.333:3306/rpep?zeroDateTimeBehavior=convertToNull"/>
    	
  </GlobalNamingResources>
 

 

3. 再在context.xml文件里添加全局引用:

 

<ResourceLink global="jdbc/rpepTest" name="jdbc/rpepTest1" type="javax.sql.DataSource"/>
 说明:jdbc/rpepTest是全局的JNDI,jdbc/rpepTest1是你的应用中使用的JNDI。

 

           这一步也可以在应用程序的WebRoot\META-INF\下新建context.xml,然后中增加:

 

<ResourceLink global="jdbc/rpepTest" name="jdbc/rpepTest1" type="javax.sql.DataSource"/>
 以上配置完成之后,无需在web.xml里配置数据源引用了(配置了也没有作用)。

 

 

4. 测试过程同上。

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    intellij idea使用tomcat开发时自动部署jndi数据源

    在这个场景中,“intellij idea使用tomcat开发时自动部署jndi数据源”是一个重要的知识点,它涉及到如何在IDE中配置和管理数据库连接,以便于在应用运行时动态地查找和使用数据源。 JNDI(Java Naming and ...

    tomcat配置jndi数据源

    Tomcat 配置 JNDI 数据源 Tomcat 是一个流行的 Java Web 服务器,JNDI(Java Naming and Directory Interface)是 Java 中的一种命名和目录接口规范。Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI ...

    tomcat中配置jndi 数据源

    tomcat中配置jndi 数据源!!!

    tomcat配置JNDI数据源

    【标题】:“Tomcat配置JNDI数据源” 【描述】:“在Tomcat服务器上配置JNDI数据源,特别是通过DBCP连接池的方式” 【标签】:“tomcat,配置,JNDI数据源” 【内容】:配置JNDI数据源在Java Web应用程序中是一个...

    在Tomcat配置JNDI数据源的三种方式

    在Tomcat配置JNDI数据源的三种方式

    Tomcat配置JNDI数据源的N种方法

    Tomcat配置JNDI数据源的N种方法

    tomcat8 JNDI数据源加密

    TOMCAT8 JNDI对用户名和密码加密

    Tomcat6.0配置JNDI数据源完整例子(5.5与此配置相同)

    标题中的“Tomcat6.0配置JNDI数据源完整例子”是指在Apache Tomcat 6.0服务器中设置Java Naming and Directory Interface (JNDI)数据源的过程。JNDI是一个API,它允许应用程序查找和使用命名服务,如数据库连接池。...

    Tomcat6配置JNDI出错

    在Tomcat中,JNDI被用来查找和绑定资源,如数据源、EJB等。配置JNDI资源可以帮助我们实现应用程序与数据库或其他服务的解耦,提高代码的可移植性和可维护性。 当在Tomcat6中配置JNDI时,错误可能由多种原因引起: ...

    java中使用tomcat提供的JNDI数据源

    首先,在Tomcat中配置JNDI数据源需要创建一个`Resource`元素在特定的`Context`配置文件中。具体步骤如下: 1. **创建发布XML文件**:在`jakarta-tomcat-5.5.9\conf\Catalina\localhost`目录下创建一个名为`myprj....

    JNDI数据源配置(tomcat)

    在 Tomcat 中,配置 JNDI 数据源有两种方式:单个应用独享数据源和全局 JNDI 数据源。 1. 单个应用独享数据源 在 Tomcat 的 server.xml 文件中,添加一个私有数据源的配置。例如,使用 c3p0 数据源的配置: ```...

    Tomcat-5配置JNDI数据源

    【描述】:“配置Tomcat 5.5及以上版本中的JNDI数据源” 【标签】:“JNDI数据源”、“数据源”、“JNDI” 【正文】: 在Java应用服务器如Tomcat中,JNDI(Java Naming and Directory Interface)是一种标准接口...

    tomcat jndi数据源解密factory

    自定义jndi数据源factory类,用于解密jndi中的加密数据,解密方式为DES,具体可根据实际需求修改。

    配置 JNDI 数据源

    在Spring框架与Tomcat服务器的集成中,配置JNDI数据源是将数据库连接管理交给服务器来处理,提高应用的可移植性和资源利用率。下面将详细解释配置JNDI数据源的相关知识点。 一、JNDI数据源的概念 JNDI数据源是一种...

    tomcat6.0 配置jndi

    **二、Tomcat6.0配置JNDI数据源步骤** 1. **创建数据源配置文件**:在Tomcat的`conf/server.xml`文件中,找到`&lt;GlobalNamingResources&gt;`标签,在其中添加数据源的配置。例如,创建一个名为`jdbc/myDataSource`的...

    Tomcat6.0 JNDI数据源经典实例

    本实例是一个关于如何在Tomcat 6.0中配置和使用JNDI数据源的经典示例,包含了所需的JAR包、配置文件和SQL脚本。 首先,我们来看配置JNDI数据源的步骤。在Tomcat的`conf/server.xml`文件中,你需要添加一个新的`...

    Tomcat jndi 配置数据源过程

    总结,通过上述步骤,你已经在Tomcat中成功配置了一个JNDI数据源,使得应用程序可以通过全局名字方便地获取和释放数据库连接。这种配置方式提高了代码的可复用性和可维护性,同时利用连接池优化了数据库操作的性能。

Global site tag (gtag.js) - Google Analytics