-
2016-10-13 12:52:47
Tomcat-->conf-->在context.xml节点中添加配置
<?xml version='1.0' encoding='utf-8'?>
<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" />
-->
<Resource name="jdbc/source"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="scott"
password="smq"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE" />
</Context>
Web项目-->Web-Root-->在web.xml节点中添加配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<res-ref-name>jdbc/source</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
web项目-->src-->com.niit.util-->DBUtil.Java
public class DBUtil {
private DBUtil(){}
//JNDI方式配置数据源
public synchronized static Connection getConnectionByJNDI(){
Connection con = null;
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/source");
con = ds.getConnection();
} catch (NamingException e) {
System.out.println("连接错误!");
// e.printStackTrace();
}catch(SQLException e){
System.out.println("获取连接失败!");
// e.printStackTrace();
}
return con;
}
public static void closeResource(ResultSet rs,Statement stmt,Connection con){
try {
if(rs != null){
rs.close();
}
if(stmt != null){
stmt.close();
}
if(con != null){
con.close();
}
}catch (SQLException e) {
System.out.println("关闭资源失败!");
// e.printStackTrace();
}
}
}
注意事项:
1、在context.xml中的引用的资源名称必须和web.xml中保持一致;
2、web容器中要添加数据库的驱动jar,将tomecat目录中lib文件夹下的class12文件替换为ojdbc14;
3、java中访问数据源应在web容器开启后在jsp或servlet中进行访问,不能再main方法中直接调用。
JNDI配置数据源就是应用服务器通过WEB容器连接数据库,达到分布式的开发并集成服务器的目的,不像JDBC直接使用应用程序进行数据库连接。不开启任何WEB服务器,就无法启动JNDI。
更多相关内容 -
Java使用JNDI配置WEB项目数据源
2017-10-11 17:34:32Java使用JNDI配置WEB项目数据源 参考http://www.devzeng.com/blog/java-jndi-datasource.html JNDI(Java Naming and Directory Interface,Java命名与目录接口)是Java提供的一种标准的命名系统接口,JNDI提供...Java使用JNDI配置WEB项目数据源
参考http://www.devzeng.com/blog/java-jndi-datasource.html
JNDI(Java Naming and Directory Interface,Java命名与目录接口)
是Java提供的一种标准的命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI(Service Provider Interface,服务提供者接口)
的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。使用传统的方式
一般对于普通的项目,习惯上使用
.properties
的文件来配置数据源的一些信息。在.properties
文件中配置数据源连接字符串、用户名、密码和驱动的类,然后在代码中读取配置文件的信息再通过DriverManager.getConnection(url, username, password)
的方式获取数据源连接对象,步骤如下,以SQLServer为例:(1)注册驱动
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
(2)获取连接对象
Connection conn = DriverManager.getConnection(url, username, password);
(3)示例代码
public static Connection getDefaultConnection() { try { String url = "jdbc:sqlserver://localhost:1433;databaseName=DBName"; String username = "sa"; String password = "*"; String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //注册SQLServer的驱动 Class.forName(driver); //获取数据源连接对象 Connection conn = DriverManager.getConnection(url, username, password); return conn; } catch (Exception e) { e.printStackTrace(); return null; } }
使用JNDI的方式
1、获取数据源的连接对象
Connection
public static Connection getConnection(String jndi) { DataSource datasource = null; Connection connection = null; try { Context context = new InitialContext(); Context envContext = null; try { envContext = (Context) context.lookup("java:/comp/env"); } catch (Exception e1) { // 无法通过java:方式获得换用/comp/env的方式 try { envContext = (Context) context.lookup("/comp/env"); } catch (Exception fff) { e1.printStackTrace(); } } //如果数据源的名称不为空的话使用指定的数据源的名称来获取数据库连接对象 if(StringUtils.isNotEmpty(jndi)) { datasource = (DataSource) envContext.lookup(jndi); } else { datasource = (DataSource) envContext.lookup("sqlserver/default"); } connection = datasource.getConnection(); } catch (Exception e2) { e2.printStackTrace(); } return connection; }
2、在Tomcat中的webapp中加入
Resource
配置<Resource name="sqlserver/default" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="sa" password="*" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databasename=DBNAME"/>
常见配置属性描述:
-
name:JDBC数据源的名称
-
auth:认证方式,一般设置为
Container
,还有一种是Application
-
type:当前配置资源的类别
-
factory:数据源工厂,默认为"org.apache.commons.dbcp.BasicDataSourceFactory"
-
driverClassName:驱动的全路径类名
-
maxActive:当前数据源支持的最大并发数
-
maxIdle:连接池中保留最大数目的闲置连接数
-
maxWait:当连接池中无连接时的最大等待毫秒数,在等当前设置时间过后还无连接则抛出异常
-
username:访问数据库的用户名
-
password:访问数据库的密码
-
url:JDBC驱动的连接字符串
-
validationQuery:在返回应用之前,用于校验当前连接是否有效的SQL语句,如果指定了,当前查询语句至少要返回一条记录,可以写成
select top 1 * from sysobjects
3、在Tomcat的
lib
目录下面添加数据库的驱动文件MySQL:
mysql-connector-java-5.1.20-bin.jar
SQLServer:
sqljdbc4.jar
Oracle:
ojdbc14.jar
4、在web.xml加入如下配置
<resource-ref> <res-ref-name>sqlserver/default</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
注:属于可选配置,如果在web.xml中加入了上面的配置,则需要在Tomcat中一定要配置对应的
Resource
,否则会报错。5、使用方式
Connection conn = getConnection("sqlserver/default"); ...
-
-
JNDI配置
2022-02-15 14:58:571. JNDI配置 1.1 web.xml配置 在java web项目中的WEB-INF目录下的web.xml中添加数据库资源的引用 <!-- 配置连接池JNDI的引用 --> <resource-ref> <description>MySQL DataBase Connection</...1. JNDI配置
第一步需要导入数据库连接需要用到的jar包。
1.1 web.xml配置
在java web项目中的WEB-INF目录下的web.xml中添加数据库资源的引用。
<!-- 配置连接池JNDI的引用 --> <resource-ref> <description>MySQL DataBase Connection</description> <res-ref-name>jdbc/mysql</res-ref-name><!-- name应于context.xml中引用的名字相同 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
1.2 context.xml配置
在java web项目中的META-INF目录下的context.xml中添加数据库配置资源,如果没有context.xml文件可以自行创建并添加。在tomcat运行时会自动的将项目下的该文件配置信息加载到服务器的contex.xml文件中,所以不需要像网上说的那样都配置。
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- 连接池属性配置 --> <!-- name应于web.xml中引用的名字相同,maxTotal是最大连接人数 maxIdle最大等待人数,maxWaitMillis最大的等待时间(以毫秒计算) --> <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" username="root" password="root" maxTotal="10" maxIdle="4" maxWaitMillis="6000"/> </Context>
1.3 连接池工具类
import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class ConnectionPoolUtil { // 内容环境固定写法 private static final String ENVIRONMENT = "java:comp/env/"; // web.xml配置文件中数据库资源的名称,需要web.xml和context.xml都一致 private static final String RESOURCE_NAME = "jdbc/mysql"; private static DataSource dataSoruce = null; static { try { // 初始化上下文内容对象 Context context = new InitialContext(); // 在上下文内容对象中寻找内容环境和配置信息 dataSoruce = (DataSource)context.lookup(ENVIRONMENT.concat(RESOURCE_NAME)); // 关闭内容对象 context.close(); } catch (NamingException e) { e.printStackTrace(); } } /** * 获取数据库连接 * @return 数据库连接对象 */ public static final Connection getConnection() { Connection connection = null; try { // 获取数据库连接 connection = dataSoruce.getConnection(); }catch (SQLException e) { e.printStackTrace(); } return connection; } }
2. JNDI测试
创建一个jsp文件,编写测试。连接池因为需要内容对象,所以只能通过服务器加载来进行测试。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="javax.naming.*,javax.sql.*,java.sql.*,util.ConnectionPoolUtil"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Connection connection = ConnectionPoolUtil.getConnection(); String sql = "select * from user"; PreparedStatement preparedStatement; try { preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); int id; String name = null,sex = null; while(resultSet.next()) { id = resultSet.getInt("id"); name = resultSet.getString("name"); sex = resultSet.getString("sex"); out.println("id:"+id+"name:"+name+"sex:"+sex+"<br>"); } resultSet.close(); preparedStatement.close(); // 若想测试最大连接人数可以把下面这句注释掉,一直占用连接资源 connection.close(); } catch (SQLException e) { e.printStackTrace(); } %> </body> </html>
-
Java web项目采用JNDI方式在Tomcat服务器中配置Oracle数据源
2019-01-15 21:49:07前言:最近在研究邮箱激活账号,借此介绍一下Tomcat配置数据源的...在Tomcat服务器中配置JNDI参数,定义一个数据源,在程序中通过数据源名称引用数据源从而与数据库交互,避免了程序与数据库之间的紧耦合,使应用...前言:最近在研究邮箱激活账号,借此介绍一下Tomcat配置数据源的方法
一,JNDI简介与优点
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。在Tomcat服务器中配置JNDI参数,定义一个数据源,在程序中通过数据源名称引用数据源从而与数据库交互,避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。
二,环境准备
JDK, Eclipse IDE,Tomcat服务器, Oracle数据库
三,开始配置
1.在Eclipse左侧项目目录位置找到Servers,打开该项目找到context.xml配置文件,目录结构如下
打开该配置文件 ,添加如下配置,各属性说明如下
2.新建web项目 在WebContent/WEB-INF/lib 目录下添加oracle驱动包
3.新建DBUtil类 加载数据源 ,获取连接(估计到这里大家拿到Connection连接就该知道如何进行与数据库的操作了,还不会的继续往下看)
package com.mail.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class DBUtil { /** * 这里采用 JNDI(java命名和目录接口)方式加载JDBC DataSource * 需要在Tomcat服务器context.xml中配置文件配置数据源 * * @return */ public static Connection getConnection() { Connection con = null; try { Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle");// 引用数据源 con = dataSource.getConnection(); } catch (Exception e) { e.printStackTrace(); } return con; } /** * 关闭资源 * * @param rs * 要关闭的结果集 * @param pstmt * 要关闭的预编译块 * @param con * 要关闭的连接 */ public static void close(ResultSet rs, PreparedStatement pstmt, Connection con) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
4.新建 PersonInfoDao类与数据库交互,进行增删查改,这里是基于我的邮箱激活小项目对与数据库交互的类,仅供参考。
package com.mail.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.mail.pojo.PersonInfo; import com.mail.util.DBUtil; public class PersonInfoDao { /** * 添加注册信息 * * @param personInfo * @return */ public int regist(PersonInfo personInfo) { int result = 0; Connection conn = null; PreparedStatement pstmt = null; try { conn = DBUtil.getConnection(); String sql = "insert into PersonInfo values(seq_personInfo_id.nextval,?,?,?,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, personInfo.getName()); pstmt.setString(2, personInfo.getMail()); pstmt.setString(3, personInfo.getPassword()); pstmt.setInt(4, personInfo.getState()); pstmt.setString(5, personInfo.getActcode()); result = pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(null, pstmt, conn); } return result; } /** * 激活账号 * * @param actcode * @return */ public int active(String actcode) { int result = 0; Connection conn = null; PreparedStatement pstmt = null; try { conn = DBUtil.getConnection(); String sql = "update PersonInfo set state=1 where actcode=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, actcode); result = pstmt.executeUpdate(); DBUtil.close(null, pstmt, conn); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(null, pstmt, conn); } return result; } /** * 登录 * * @param personInfo * @return */ public int login(PersonInfo personInfo) { int result = 0; Connection conn = null; PreparedStatement pstmt = null; try { conn = DBUtil.getConnection(); String sql = "select * from PersonInfo where state = 1 and mail = ? and password = ?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, personInfo.getMail()); pstmt.setString(2, personInfo.getPassword()); result = pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(null, pstmt, conn); } return result; } }
-
JNDI数据源配置(tomcat)
2014-07-26 17:16:10自己总结的三种使用方式,对比来看选择最适合你的方式 -
Tomcat使用JNDI配置数据源
2021-01-30 11:10:351. JNDI简介1.1 定义JNDI就是Sun提出的一套对象命名和目录服务的接口,全称为Java Naming and Directory Interface,简单的说就是JNDI通过目录服务的基础上抽象了一层来查找Java对象。引用维基百科中的定义如下:The... -
JNDI 之web项目数据源配置
2017-02-23 22:21:00JNDI 之web项目数据源配置 1.把数据源配置到Server下context.xml 文件中(也可以配置在web.xml中) <WatchedResource>WEB-INF/web.xml name="jdbc -
JNDI常见配置方式
2021-03-04 04:02:55JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。...tomcat配置jndi有全局配置和局部配置。第一种:全局配置1)在tomcat的conf文件夹下的context.xml... -
jndi数据源配置
2021-01-18 18:35:04在描述JNDI,例如获得数据源时,JNDI地址有两种写法,例如同是 jdbc/testDS 数据源:A: java:comp/env/jdbc/testDSB: jdbc/testDS这两种写法,配置的方式也不尽相同,第一种方法应该算是一种利于程序移植或迁移的... -
Tomcat下配置JNDI数据库连接池并使用
2021-01-19 22:03:04这一步有几种配置方式,比如直接修改Tomcat/conf/server.xml文件,但这样修改是全局的,个人不太喜欢这样的方式,本着的原则是能不全局不全局,以保证项目能够尽量少的影响到其他项目,尽量少的进行修改。... -
SpringWebMvc JNDI数据源配置
2022-01-15 10:23:21JNDI tomcat7 springweb -
idea中配置JNDI数据源
2018-09-20 14:54:16在公司接触一个报表项目时,发现里面使用的JNDI配置的数据源,在web.xml中有resource-ref这个标签,这种方式跟传统的JDBC连接还是有些区别 JNDI简介 JNDI(Java Naming and Directory Interface,Java命名和目录接口)... -
tomcat jndi数据源连接池配置(全局与非全局jndi配置)
2018-04-25 10:47:19全局jdni配置1.tomcat下server.xml增加全局数据源<!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- ... -
JNDI配置连接池问题-Too many connections
2022-03-20 20:52:11Eclipse配置JNDI连接池 JNDI就是(JavaNaming and Directory Inteface)Java名称目录接口 概念参考-JNDI 的理解 1、预加载连接池时出错 2、数据源拒绝建立连接,来自服务器的消息:“连接太多” java.sql.... -
什么是JNDI,Spring如何使用JNDI配置多个数据源?
2019-08-20 19:13:15在使用JNDI前需要了解,什么是JNDI?JNDI(Java Naming and Directory Interface ),即Java命名和目录接口。是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务... -
JNDI配置DataResource代替JDBC连接数据库
2020-10-25 20:28:30JNDI配置DataResource代替JDBC连接数据库 1.JDBC和JNDI JDBC就是我们连接数据库的一个标准的Java API,JDBC提供了一系列接口和规范,各个数据库公司根据其JDBC接口和规范,开发出各自的连接和操作数据库的.jar包... -
java web总结(JNDI的配置)
2015-09-24 21:10:16首先你需要在你D:\java\apache-tomcat-7.0.42\conf\Catalina\localhost中配置你要用的项目,此文件必须为你的项目名字 比如我的是day20配置如下; 前三句是规定的不容改变的,当然导入包是不可缺少的,配置之后,... -
JNDI配置数据源(tomcat上配置)
2017-10-12 11:28:34JNDI配置数据源的意义: 我感觉它主要意义是降低了数据源与项目的耦合度,数据源在服务器(比如tomcat)上配置,应用程序引用数据源就行。这样多个项目用同一个数据源时就不用一个一个地给项目复制粘贴相同的数据源... -
jndi配置示例
2017-06-26 17:07:26在tomcat的\conf\Catalina\localhost下(没有目录就新建)创建一个xml文件,文件名必须和项目名相同,加入测试JNDI数据源的web项目的项目名称是:JNDITest,所以xml文件的命名就叫JNDITest.xml <!-- jndi... -
使用Intellij idea配置JNDI资源
2019-03-28 14:01:32使用Intellij idea配置JNDI资源 JNDI(Java Naming and ...这里我要配置的资源是连接池,这样项目能够通过统一的方式来获取连接池对象。 Intellij idea的配置方法 我这里用Tomcat配置JNDI资源,具体操作如下: ... -
tomcat 默认web jndi配置
2015-12-24 17:02:28用eclipse开发项目,tomcat为web server. 1. 配置项目在server.xml中 这样访问自己的项目,将没有web名称的context, 例如: 127.0.0.1/login 2. 在tomcat/conf/context.xml中添加数据源配置 ... -
tomcat下JNDI的三种配置方式(转载+原创)
2021-02-07 09:26:13JNDI(JavaNaming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录...tomcat配置jndi有全局配置和局部配置。大致的有以下三种配置方式:第一种:全局配置。1)在tomcat的conf文件夹... -
SpringBoot配置JNDI数据源
2021-01-13 19:58:181、 数据源配置1.1、%CATALINA_HOME%/conf/server.xml 配置全局资源server.xml文件找到GlobalNamingResources节点,加入如下代码driverClassName=... -
【Java Web】Tomcat JNDI官网文档阅读笔记,JNDI数据源配置,JNDI自定义资源工厂配置
2022-04-20 15:42:25【Java Web】Tomcat JNDI官网文档阅读笔记,JNDI数据源配置,JNDI自定义资源工厂配置 -
Java使用JNDI调用配置在服务器(Weblogic、Tomcat)的数据源配置
2021-10-22 07:43:28本篇介绍在Weblogic和Tomct 中配置数据源, 并演示使用Java JNDI获取数据库连接的代码示例。 WebLogic 的配置与使用 WebLogic 控制台可以配置数据源。 左侧导航栏 Services > Data Sources 点击New 按钮 Generic... -
JNDI连接池配置
2020-07-01 14:26:541:context.xml的文件配置 选择application server中的tomcat选项,应用后会在你...2:web.xml的文件配置。 点击上个图中的WEB-INF中的web.xml文件进行编辑,内容是: 其中的name和1中的name名字要一致。其他的照抄。 -
mybatis+Tomcat使用JNDI配置数据源
2018-11-20 20:13:35我自己做了一个练手的项目,项目已经基本完成,但是项目开始用的是jdbc配置数据源,一切都没有问题,后来我想把它改成用jndi配置数据源。下面是我改造时查了很多资料后整理的学习笔记,自己试过了没问题。仅供参考,...