用JNDI连接数据库
之前说到了利用Java中的Properties类读取properties配置文件,连接数据库,现在说另一种方法,他们的目的和作用都是一样的,都是为了提高代码的复用性,解决了更改数据库
时还要更改代码的麻烦。和之前的properties解决的问题一样这里就不说了,详见前一篇文章:Java读取properties文件连接数据库
jndi是什么?
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现。
我们能做的就是拿来直接用
这是Tomcat网站上给我们的提示,告诉我们怎么配置,还有一些模板:https://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html
下面还是我的mail项目,在eclipse中用jndi连接数据库(获取数据库连接)执行操作
在eclipse中建的web项目会有WebContent目录,MyEclipse中是WebRoot目录,其实都是一样的,在目录下有META-INF文件夹,在里面新建context.xml输入以下内容
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/mail"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mail"/>
<
- driverClassName -
要使用的JDBC驱动程序的完全限定的Java类名称。 - username
- 要传递给我们的JDBC驱动程序的数据库用户名。 - password
- 要传递给我们的JDBC驱动程序的数据库密码。 - url -
要传递给我们的JDBC驱动程序的连接URL。(为了向后兼容,该属性driverName
也被识别。) - initialSize -
池初始化期间将在池中创建的初始连接数。默认值:0 - maxActive -
可以同时从此池分配的最大连接数。默认值:8 - minIdle -
同时在此池中闲置的最小连接数。默认值:0 - maxIdle -
可以同时在该池中闲置的最大连接数。默认值:8 - maxWait -
抛出异常之前要返回的连接的池将等待的最大毫秒数(当没有可用连接时)。默认值:-1(无限) - name
- 数据源名称,可以随便定义注意要和后面的web.xml文件中的一致 - auth - 这个官方也没有给出……没找到
接下来在WEB-INF中的web.xml文件中添加一些内容
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mail</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
里面的res-ref-name中的属性值要和之前的context.xml中的name是一致的,还有auth属性也要一致,这样才能找到。
直接把之前写的获取数据库连接的类改了
package util; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource; public class ConnectionManager {
public static Connection getConnection() {
Connection conn = null;
try {
// 初始化查找命名空间
Context ctx = new InitialContext();
// InitialContext ctx = new InitialContext();//也可以
// 找到DataSource,对名称进行定位java:comp/env是固定的,后面跟的是在配置文件中定义的name
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mail");
//获取数据库连接
conn = ds.getConnection();
System.out.println("connection connected !");
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
运行项目,得到connection connected !输出,查看数据库表中数据,添加成功。
用JNDI连接数据库的更多相关文章
- tomcat6配置jndi连接数据库的方式
eworkflow工作流+eform表单+ebiao报表集成在一起,用tomcat6发布,并用jndi连接数据库,数据库是sqlserver2005,配置如下: 1.在tomcat6\conf\con ...
- 使用JNDI连接数据库
第一步:实现一个Java类: package com.logistic.data; import java.sql.*;import javax.sql.*;import javax.naming.* ...
- JNDI连接数据库的详细步骤 以及简要的c3po数据库连接的配置
第一步在tomcat的context.xml文件中配置数据源:context.xml的路径形式是:D:\Program Files (x86)\apache-tomcat-6.0.44\conf\co ...
- Tomcat,Jboss,Weblogic通过jndi连接数据库
1. Tomcat配置Jndi数据源 1.1在tomcat服务器的lib目录下加入数据库连接的驱动jar包 1.2修改tomcat服务器的conf目录下server.xml配置文件 编辑server ...
- jndi连接数据库配置过程总结
一.我们先找到tomcat安装目录中conf目录下的context.xml更改里面的内容: <?xml version='1.0' encoding='utf-8'?> <Conte ...
- Quartz集群配置
先看看quartz的持久化基本介绍: 引用 1 大家都清楚quartz最基本的概念就是job,在job内调用具体service完成具体功能,quartz需要把每个job存储起来,方便调度,quartz ...
- javax.naming.NoInitialContextException错误的解决方案
今天,学习用了一下nutz框架,写了一个HelloWorld的小程序,在用jndi配置数据源时,写了一个测试类,并在main方法中调用了jndi获得数据库连接,但是报错了,错误信息如下: javax. ...
- javax.naming.NoInitialContextException: Need to specify class name in environment or system property
javax.naming.NoInitialContextException: Need to specify class name in environment or system property ...
- Tomcat 配置连接池
1. Tomcat 配置 JNDI 资源 JNDI(Java Naming and Directory Interface), Java 命名和目录接口; JNDI 作用: 在服务器上配置资源, 然后 ...
随机推荐
- EntityFramework Core 2.0全局过滤(HasQueryFilter)
前言 EntityFramework Core每一次版本的迭代和更新都会带给我们惊喜,每次都会尽量满足大部分使用者的需求.在EF Core 2.0版本中出现了全局过滤新特性即HasQueryFilte ...
- Vue第一个自定义组件:数字输入框(number-input)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nimi SearchEngin 项目思路及算法
最近做一个轻量文本搜索项目,在项目实行过程中,如果使用余弦求网页相似度,不能适应海量网页查重.看了那本<这就是搜索引擎 核心技术详解>后,对simhash算法有一定的理解,并且喜欢上了这 ...
- Centos 6.5升级openssh漏洞
CentOS 6.5下openssh升级 在有的企业中每年都会安全扫描,因为实现远程连接比较重要,如果openssh版本过低,就要对其升级,本文主要讲述openssh升级的步骤. openssh升级主 ...
- ap module omap4460
http://gitorious.org/ap-module-omap4460 Dashboard Register Login Activities Projects Teams ap module ...
- 从VGA到GPU!细数二十年显卡发展历程
VGA有很多层涵义,本来是用于代表一个分辨率(您可能不了解VGA,但应该知道QVGA代表什么),随后被普遍称为显示输出接口.为了输出VGA分辨 率.提供VGA输出接口,显卡和VGA就有了不解之缘,显卡 ...
- JSP常见的7个动作指令
JSP常见的7个动作指令 1.jsp:forward指令 执行页面转向,将请求处理转发到下一个页面 2.jsp:param指令 用于传递参数 3.jsp:include指令 用于动态 ...
- DirectShow学习笔记总结
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,9.0之前 ...
- Matlab和C语言混合编程,包含目录的设定
如果.c文件不依赖于任何第三方库,那么mex编译很简单,只需要在matlab的命令行输入 mex test.c 即可. 但是如果这个c文件使用了第三方库文件,如opencv.gsl等等,那么就需要更改 ...
- dom文档对象模型图