还记得3年前写的第一个Java操作JDBC的程序,关于连接参数的配置全都硬编码写在Java代码里面。然后开始尝试着使用数据库连接池,比如DBCP、C3P0之类的,并且把连接池的设置参数写在属性文件里面,如mysql.properties,然后累死累活的从属性文件中把连接池参数解析出来,只为了修改参数的之后不再重新编译Java源文件。在使用Spring框架之后,终于从属性文件的解析中解脱出来,感觉对数据库连接池使用的学习应该到此结束。
在生产环境下,为了使对数据库连接池参数的修改生效,不得不重启Tomcat,这真是个噩梦。然而,在学习了Tomcat对JNDI数据源的支持后,这不在是一个问题了。
【一】. context.xml与JNDI数据源:
<1>. 我们可以将JNDI数据源的配置放在Tomcat的/conf/context.xml文件中完成,Tomcat能够自动检测到context.xml文件内容的修改,并重新加载。关于JNDI:全称为Java命名与目录接口(Java Naming and Directory Interface)。 允许我们通过对象的“名称”来访问一个对象。
<2>. Tomcat容器支持JNDI规范,默认使用tomcat-dbcp.jar依赖,context.xml文件的配置如下所示:
<?xml version='1.0' encoding='utf-8'?> <Context> <Resource name = "excelsoft-jndi-test" auth = "Container" type = "javax.sql.DataSource" driverClassName = "org.postgresql.Driver" url = "jdbc:postgresql://127.0.0.1:5432/jndi-test" username = "postgres" password = "postgres" maxActive = "200" maxIdle = "30" maxWait = "5000" /> </Context>
[说明]
1. 定义Resource的名称为excelsoft-jndi-test,可以定义多个<Resource>节点来连接多个数据库。
2. driverClassName:指定jdbc驱动类,这里使用的是PostgreSQL数据库,需要将PostgreSQL的JDBC驱 动添加到Tomcat的/lib目录下面,本例中使用postgresql-9.3-1100.jdbc4.jar驱动程序。
3. 连接池参数设置:
maxActive:最大活动连接数,最多能创建的物理连接数。
maxIdle:最大空闲连接数,多余的空闲连接将被回收。
maxWait:最大等待时间,单位为ms。
【二】.web应用中的配置:
在web应用的web.xml中添加如下内容
<resource-ref> <description>jndi data source test</description> <res-ref-name>excelsoft-jndi-test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
【三】.使用JNDI数据源获取连接:可简单编写如下所示的工具类,仅供参考
/* * Copyright (c) 2014, Nick Xu, All rights reserved. */ package com.excelsoft.util; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; /** * 功能简述: 一句话简述编写目的、主要功能等信息. * @author Nick Xu * @version 1.0 */ public class DBConn { private static DataSource dataSource; static { try { Context context = new InitialContext(); dataSource = (DataSource)context.lookup("java:comp/env/excelsoft-jndi-test"); } catch (NamingException e) { // Exception handler e.printStackTrace(); } } public static Connection getConn() { try { Connection conn = dataSource.getConnection(); return conn; } catch (SQLException e) { // Exception handler e.printStackTrace(); } return null; } public static void closeConn(Connection conn) { try { if(null != conn) { conn.close(); } } catch (SQLException e) { // Exception handler e.printStackTrace(); } } }
[说明]
1. 定义上下文对象:
Context context = new InitialContext();
2. 获取JNDI数据源:
DataSource dataSource = (DataSource)context.lookup("java:comp/env/excelsoft-jndi-test");
3. 从数据源中获取逻辑连接:
Connection conn = dataSource.getConnection();
4. 关闭连接:归还给数据库连接池
conn.close();
==================================
项目源码,参见附件!OK,暂告一段落!
相关推荐
TOMCAT8 JNDI对用户名和密码加密
NULL 博文链接:https://buliedian.iteye.com/blog/858026
自己总结的三种使用方式,对比来看选择最适合你的方式
Tomcat_5配置JNDI数据源
tomcat-jndi-数据源将 tomcat-maven-plugin 与 JNDI 数据源一起使用
tomcat上配置的JNDI数据源的几种方式
Tomcat6+spring+jndi配置数据源说明.docx
自定义jndi数据源factory类,用于解密jndi中的加密数据,解密方式为DES,具体可根据实际需求修改。
tomcat配置jndi几个方式
在Tomcat配置JNDI数据源的三种方式
Tomcat配置JNDI数据源的N种方法
java中使用tomcat提供的JNDI数据源
JavaEE5学习笔记02-JNDI与RMI,
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] where: -C - command executed in the remote classfile. (optional , default command is "open /Applications/...
Tomcat jndi 配置数据源过程 Tomcat jndi 配置数据源过程 Tomcat jndi 配置数据源过程 Tomcat jndi 配置数据源过程
Tomcat JNDI 数据源 自动生成程序 Servlet 版 本程序自动判断Tomcat版本,兼容tomcat 5.0、5.5、6.0等版本, 根据项目名自动生成 JNDI 配置文件,使程序员从手动配置JNDI数据源中解脱出来。 使用说明: 1、把...
tomcat中配置jndi 数据源!!!
收集而来。非常的好@@@累死了,睡觉去@ 在struts+hibernate中使用tomcat5.5的jndi数据源