Tomcat 5.5(以上版本)配置JNDI数据源
配置数据源,总的来说有两种思路,思路一是直接在<Context>中配置局部数据源,思路二是先配置全局数据源,然后再在<Context>应用中链接到全局数据源,又因为Tomcat中<Context>位置多样,具体我分为如下几种方法:
方法1、直接在<Context>中配置局部数据源,tomcat中%tomcat_home%\conf\ context.xml中的<Context>中添加数据源。即将第2步中的数据直接添加到<Context>节点下。已通过验证。
方法2、第2步 + 第6步,测试通过。
方法3、方法4、先配置全局数据源,然后再在<Context>应用中链接到全局数据源,在server.xml中的<GlobalNamingResources>元素中配置数据源(数据源配置见上文)成全局数据源,然后在<Context>元素链接到该资源。另外,<Context>位置可有多个,那么在<Context>元素链接到全局数据源的位置时,<Context>的位置可有两个如下:
实现方式有:方法3-------第2步 + 第3步,联合实现,测试通过
方法4---------第2步 + 第7步,联合实现,测试通过
方法5:(直接配置的类型,这种方式最简单)
就是第8步的操作即可,验证通过
1、(必不可少)先将JDBC驱动加入到tomcat6/lib目录下
如果直接用JDBC访问数据库,可以把JDBC驱动程序拷贝到Web应用的WEB-INF/lib目录或者Tomcat安装目录下的common/lib目录下。
如果通过数据源访问数据库,由于数据源由Servlet容器创建并维护,所以必须把JDBC驱动程序拷贝到Tomcat安装目录下的common/lib目录下,确保Servlet容器能够访问驱动程序。
2、在tomcat的conf/server.xml中的<GlobalNamingResources>元素中添加如下内容:
<!—连接sqlserver -->
<Resource
name="jdbc/sqlservertest"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="45"
username="sa"
maxWait="180"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
password="123456"
url="jdbc:jtds:sqlserver://localhost:1433/test"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
testOnReturn="true" testWhileIdle="true"/>
<!—连接mysql -->
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/wxl"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000" />
以上配置了两个全局数据源,一个叫jdbc/sqlservertest,是SQLServer2000的,一个叫:jdbc/mysql,是连接mysql的
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
3、在tomcat的conf/ context.xml中的<Context>元素中添加如下内容:
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />
4、补充一步(可有可无)
在应用发布目录下\web-inf\web.xml文件中配置该数据源的引用<resource-ref>元素(注意位置,一般放在<web-app>根元素中最后面,详细参考dtd文件)。我在如上所示环境实际测试时发现,此文件可有可无。(确实是这样的)有的文章说配置了可能会更稳定,未及考证。如下:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
这一步的目的就是告诉tomcat如何连接数据库
5、获得连接
<%@ page language="java" import="java.util.*,java.sql.Connection,javax.sql.DataSource, javax.naming.InitialContext" pageEncoding="utf-8"%>
<html>
<head>
<%
InitialContext ctx = new InitialContext();
String strLookup = "java:comp/env/jdbc/mysql";
DataSource ds =(DataSource) ctx.lookup(strLookup);
Connection con = ds.getConnection();
if (con != null){
System.out.print("success");
}else{
System.out.print("failure");
}
%>
<body>
搞得我好辛苦啊 <br>
</body>
</html>
补充一个常见错误:
上述代码在J2EE服务器环境下工作得很好,但是在main()中就会报错:javax.naming.NoInitialContextException:
之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数,在服务器环境下,服务器启动时就把这些参数放到System.properties中。
所以可以通过以下方法解决:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL,"t3://localhost:7001");
InitialContext ctx = new InitialContext(env);
或
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:3306/wxl");
System.setProperty(Context.SECURITY_PRINCIPAL, "root");
System.setProperty(Context.SECURITY_CREDENTIALS, "root");
以上代码建议改为在配置文件中配置
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=rmi://localhost:3306/test
java.naming.security.principal=root #用户名
java.naming.security.credentials=root #密码
这里要正常运行,肯定要导入weblogic.jndi.WLInitialContextFactory相关的包了。
然后将做个web工程发布到tomcat下;我用了两种方式发布:一种是war包的方式,一种是在server.xml中添加一个Context;
下面分别说说两种发布方式的区别:
6、war包方式:
如果要用war包方式发布web应用程序,又要使用JNDI数据源的话,要在你的web工程的META-INF文件夹下新建context.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
global:就是tomcat的server.xml中配置的全局数据源名称。
name:就是你的web项目中要用的那个那个数据源的名称:也就是jsp中写的那个mysqltest2名称;
7、在server.xml中添加context的方式:
直接在server.xml中的<Host></Host>中添加如下内容:
<Context path="/Pool" docBase="E:/apache-tomcat-6.0.16/webapps/Pool" reloadable="true">
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />
</Context>
其中:path为应用名
docBase 为应用路径
8、只需在tomcat_home\webapps\myapps\META-INF\context.xml中增加:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/wxl"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000" />
</Context>
说明:这种配置需要告诉tomcat resource的内容,resource应用于什么地方
//========================================================
常见错误:
1,Name jdbc is not bound in this Context
2,Cannot create JDBC driver of class ” for connect URL ‘null’ conf localhost
原因:
大多数是因为配置了全局的resource,但没有link造成的。
解决:
加入link就行了。
分析:
看到上边这么多方法,是否感觉眼花缭乱,其实不要死记配置,按照原理分析一下就好了。
你需要的是告诉tomcat哪个应用如何连接数据库。
类型一的方式对应一个应用单独使用这个配置的情况
就是直接告诉tomcat”应用名” “连接数据库需要的参数”
类型二的方式对应多个应用共享一个配置的情况
这样先配置server.xml告诉tomcat全局范围的”连接数据库需要的参数”
然后映射,映射的时候
1,如果不知道”app name(应用名)”就只需要通过文件名来传递这个信息
2,如果”app name”都知道就只需要加入映射的内容
3,如果要配置成全局公用的,就不需要”app name”,本身放在tomcat的context.xml中
最后再次提醒一下:所有的配置必须放在<context></context>之间
相关推荐
jndi在tomcat下conf文件加下的content.xml中的配置信息
### SpringMVC+JNDI+Tomcat配置数据源 #### 一、简介 在Java Web开发中,数据源(DataSource)是管理数据库连接的重要组件。SpringMVC框架结合Java Naming and Directory Interface (JNDI) 和Apache Tomcat服务器...
Tomcat 配置 JNDI 数据源 Tomcat 是一个流行的 Java Web 服务器,JNDI(Java Naming and Directory Interface)是 Java 中的一种命名和目录接口规范。Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI ...
在这个场景中,“intellij idea使用tomcat开发时自动部署jndi数据源”是一个重要的知识点,它涉及到如何在IDE中配置和管理数据库连接,以便于在应用运行时动态地查找和使用数据源。 JNDI(Java Naming and ...
1. **配置Tomcat的JNDI**:在Tomcat的`server.xml`配置文件中,可以通过`GlobalNamingResources`元素定义全局资源,如数据源。这些资源可以在Web应用中通过JNDI查找获取。 2. **应用配置**:在Web应用的`web.xml`中...
【标题】:“Tomcat配置JNDI数据源” 【描述】:“在Tomcat服务器上配置JNDI数据源,特别是通过DBCP连接池的方式” 【标签】:“tomcat,配置,JNDI数据源” 【内容】:配置JNDI数据源在Java Web应用程序中是一个...
Tomcat配置JNDI数据源的N种方法
在Tomcat中,JNDI常用于配置数据库连接池,使得多个Web应用可以共享同一个数据库连接。 配置JNDI的步骤如下: 1. **安装与配置MySQL**: 首先确保你已经安装了MySQL数据库,并创建了所需的数据库和用户。你需要...
【标题】:“Tomcat6.0配置JNDI” 在Java Web开发中,Tomcat作为常用的Servlet容器,经常被用于部署和运行Java EE应用程序。JNDI(Java Naming and Directory Interface)是Java平台的一项服务,它允许应用程序通过...
tomcat jndi 数据库配置方法
Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理。数据源是一个池子,里面有若干个数据连接对象,当需要时就从里面拿一个使用,使用完毕就放回去,如果超过最大...
在Tomcat配置JNDI数据源的三种方式
在部署该应用时,管理员可以在Tomcat的配置文件中设置相应的JNDI条目: ```xml type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username=...
Tomcat JNDI 配置 Tomcat JNDI 配置是 Java Web 应用程序中的一种常见配置,用于将数据库连接信息以 JNDI(Java Naming and Directory Interface)的形式存储在 Tomcat 服务器中,以便于应用程序可以通过 JNDI 来...
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称...本文档主要是tomcat配置jndi有全局配置和局部配置:
### JNDI与Tomcat配置详解 #### 一、引言 Java Naming and Directory Interface (JNDI) 是一种广泛使用的 Java 技术,用于访问和管理命名和目录服务。在 Web 应用开发中,JNDI 常被用来配置数据源,即数据库连接池...
总结来说,Tomcat的JNDI功能提供了强大的资源管理和配置灵活性,通过解耦配置和代码,提高了系统的可扩展性和可维护性。理解并熟练运用Tomcat的JNDI机制,对于开发高质量、高可用性的Java Web应用至关重要。而`...
在本文中,我们将深入探讨“Tomcat6配置JNDI出错”这一主题,这是一个常见的问题,很多开发者在搭建和配置Java企业级应用时可能会遇到。 JNDI,全称Java Naming and Directory Interface,是Java平台的一个标准接口...
"JNDI 数据源配置(tomcat)" JNDI(Java Naming and Directory Interface)是一种Java API,用于访问命名和目录服务。JNDI 数据源配置是 Java Web 应用程序中常用的数据库连接方式。Tomcat 是一个流行的 Java Web ...
**Tomcat配置JNDI详解** Java Naming and Directory Interface (JNDI) 是Java平台提供的一种标准服务,用于管理和查找应用程序中的资源,如数据源、邮件服务器等。在Tomcat应用服务器中,JNDI被用来注册和查找数据...