Tomcat配置数据源(JNDI方式)
- 格式:docx
- 大小:69.34 KB
- 文档页数:23
Tomcat下使用Druid配置JNDI数据源com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置。
一、下载Druid的jar包下载地址:/artifact/com.alibaba/druid/1.0.9,如下图所示:druid.jar依赖log4j的jar包,所以还需要下载log4j的jar包。
log4j的下载地址如下:/artifact/log4j/log4j/1.2.17,如下图所示:二、使用Druid配置JNDI数据源2.1、前期准备工作创建一个Web测试项目Druid_JNDI_Config,将下载下来druid-1.0.9.jar和log4j-1.2.17.jar添加到项目中,在项目的META-INF目录下创建一个context.xml文件目录结构如下图所示:在tomcat服务器的lib目录下添加Oracle、MySQL、SQLServer三种数据库的驱动jar包,如下图所示:2.2、在context.xml文件中加入JNDI的配置信息在context.xml文件中加入如下配置信息1<Context>2<!-- 使用阿里巴巴的DruidDataSource配置针对Oracle数据库的JNDI数据源-->3<Resource4name="jdbc/OracleDataSource"5factory="com.alibaba.druid.pool.DruidDataSourceFactory"6auth="Container"7type="javax.sql.DataSource"8driverClassName="oracle.jdbc.OracleDriver"9url="jdbc:oracle:thin:@192.168.1.229:1521:lead"10username="lead_oams"11password="p"12maxActive="50"13maxWait="10000"14removeabandoned="true"15removeabandonedtimeout="60"16logabandoned="false"17filters="stat"/>1819<!-- 使用阿里巴巴的DruidDataSource配置针对MySQL数据库的JNDI数据源-->20<Resource21name="jdbc/MysqlDataSource"22factory="com.alibaba.druid.pool.DruidDataSourceFactory"23auth="Container"24type="javax.sql.DataSource"25driverClassName="com.mysql.jdbc.Driver"26url="jdbc:mysql://192.168.1.233:3306/lead_oams?useUnicode=true&characterEncoding=utf-8" 27username="lead_system"28password="password"29maxActive="50"30maxWait="10000"31removeabandoned="true"32removeabandonedtimeout="60"33logabandoned="false"34filters="stat"/>3536<!--使用阿里巴巴的DruidDataSource配置针对SQLServer数据库的JNDI数据源-->37<Resource38name="jdbc/SqlServerDataSource"39auth="Container"40factory="com.alibaba.druid.pool.DruidDataSourceFactory"41type="javax.sql.DataSource"42driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"43url="jdbc:sqlserver://192.168.1.61:1433;DatabaseName=gaclTest"44username="sa"45password="p@ssw0rd"46maxActive="50"47maxWait="10000"48removeabandoned="true"49removeabandonedtimeout="60"50logabandoned="false"51filters="stat"/>52</Context>配置项中指定了各个参数后,在连接池内部是这么使用这些参数的。
Tomcat的新版本中已经不再集成Tomcat Administration Web Application,这算是一个admin的插件,需要我们手动安装,在网上找了半天没有找到6.0的admin,只有使用Tomcat 5.5.27 admin来安装,下面是安装步骤:一、首先下载安装Tomcat 6.0二、下载Tomcat 5.5.27的admin,可以从国内的这个镜像下载:/tomcat/tomcat-5/v5.5.27/bin/apache-tomcat-5.5.27-admin.zip这个下面是 5.5.26的,我们需要这下面的apache-tomcat-5.5.27-admin.zip 这个文件,这个是针对Window系统的。
下载解压,把其中的conf\Catalina\localhost下面的admin.xml 复制到Tomcat安装目录下面的conf目录,把server\webapps下的admin复制到Tomcat下面的webapps目录下面。
打开admin.xml文件,修改其中的:<Context docBase="${catalina.home}/server/webapps/admin" privileged="true"antiResourceLocking="false" antiJARLocking="false">改为:<Context docBase="${catalina.home}/webapps/admin" privileged="true"antiResourceLocking="false" antiJARLocking="false">这是因为tomcat 5.5的目录结构和6.0的不太一样,如果不修改,将出现404错误。
Tomcat中配置jndi数据源连接池服务器:tomcat6.0.18数据库:mysql-6.0.3-alpha-win32数据库驱动:mysql-connector-java-5.0.7-bin.jar一.jndi简介JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC 都是构建在抽象层上。
具体详细资料,网上已经很多了,对吧?二.手动建立一个简单的WEB工程(在webapps下建立工程test-jndi)1.建立文件夹,名称为:jnditest2.在jnditest文件夹下建立名为WEB-INF文件夹和index.html页面index.html页面内容很简单,主要用于测试工程是否建立成功Html代码1.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">2.<HTML><HEAD><TITLE>测试成功</TITLE>3.<META http-equiv=Content-Type content="text/html">4.</HEAD>5.<BODY>6.<P>7.<H3>成功了</H3>8.<P>ok,可以了</P>9.</BODY>10.</HTML>3.在WEB-INF文件夹下建立名为lib文件夹和web.xmlweb.xmlXml代码1.<?xml version="1.0"encoding="ISO-8859-1"?>2.<web-app xmlns="/xml/ns/javaee"3.xmlns:xsi="/2001/XMLSchema-instance"4.xsi:schemaLocation="/xml/ns/javaee http:///xml/ns/javaee/web-app_2_5.xsd"5.version="2.5">6.<description>7. jndi test8.</description>9.<display-name>jnditest </display-name>10. <welcome-file-list>11. <welcome-file>index.html</welcome-file>12. </welcome-file-list>13. </web-app>启动tomcat,在地址栏输入:http://localhost:8080/test-jndi/显示ok,成功----说明,手动建立工程成功。
首先定义tomcat6的安装根目录为${CATALINA_HOME}在tomcat6版本中,context元素已经从server.xml文件中独立出来了,放在一个context.xml 文件中。
因为server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。
而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。
一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。
我们当然推荐把应用需要的JNDI资源配置在context.xml文件中,而不是server.xml 文件中。
由于context元素的可用范围是可以控制的,我们可以根据需要为Context元素定义不同级别的可用范围。
一. 全局可用全局可用的范围意味着tomcat服务器下面的所有应用都可以使用这个context元素定义的资源。
全局可用范围的context元素在文件${CATALINA_HOME}/conf/context.xml 文件中描述。
这个文件在tomcat刚刚被安装的时候,是没有定义任何资源的。
我们可以看到,这个文件的内容:<Context><WatchedResource>WEB-INF/web.xml</WatchedResource>Context>其中的<watchedresource></watchedresource>WEB-INF/web.xml表示服务器会监视应用的WEB-INF/web.xml 文件来知道那个应用会引用在此处定义的资源。
二. 指定的虚拟主机可用指定的虚拟主机内可用就是说,在tomcat服务器配置的虚拟主机中,只有指定的那个虚拟主机上跑的应用才能使用。
什么是虚拟主机和如何配置虚拟主机在这里就不描述了,有兴趣的同学自己去查tomcat的官方资料。
注意事项:tomcat JDK 一定要和应用程序的JDK 版本一致(本例中统一JDK1.6)说明:tomcat5.5与6.0的配置略有不同,即:tomcat的lib位置不同(其他完全一致),6.0位置是:D:\我的工具\apache-tomcat-6.0.10\lib下5.5位置是:D:\我的工具\apache-tomcat-5.5.17\common\lib局部数据源步骤:一、拷贝数据库驱动到:D:\我的工具\apache-tomcat-6.0.10\lib下,这里是(ojdbc14.jar)二、配置context.xml文件(此步骤两种配法)方法一:使用tomcat的context.xml文件配置D:\我的工具\apache-tomcat-6.0.10\conf\context.xml中加入以下配置:注意:下面配置放到<Context>中<Resource name="jdbc/test" auth="Container"type="javax.sql.DataSource"username="zsj"password="zsj"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:zsj"maxActive="100"maxIdle="30"maxWait="10000"/>方法二:在应用中新建一个context.xml文件进行配置在WebRoot目录下META-INF的目录(假如不存在则新建),在该目录下创建一个context.xml文件,并且在context.xml文件当添加以下的配置信息:<Context><Resource name="jdbc/test" auth="Container"type="javax.sql.DataSource"username="zsj"password="zsj"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:zsj"maxActive="100"maxIdle="30"maxWait="10000"/></Context>三、应用的web.xml配置(Tomcat建议在web.xml中添加以下内容,但这不是必须的。
Springmvc +JNDI 在Tomcat下配置数据源一、简介jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
二、tomcat配置jndi有三种方式。
第一种:单个应用独享数据源在Tomcat的server.xml找到工程的Context节点,添加一个私有数据源1.<Context docBase="Web"path="/Web"reloadable="true"source="org.eclipse.jst.jee.server:WebApp">2.<Resource name="jndi/testdb"//指定的jndi名称,会用于spring数据源bean的配置和3.auth="Container"4.type="javax.sql.DataSource" //数据源床型,使用标准的javax.sql.DataSource5.driverClassName="com.mysql.jdbc.Driver"//JDBC驱动器6.url="jdbc:mysql://localhost:3306/appdb"//数据库URL地址ername="root"//数据库用户名8.password="123456"//数据库密码9.maxActive="20"10.maxIdle="10"//最大的空闲连接数11.maxWait="10000" //当池的数据库连接已经被占用的时候,最大等待时间12.removeAbandoned="true"13.removeAbandonedTimeout="180"14.logAbandoned="true"//被丢弃的数据库连接是否做记录,以便跟踪15.factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" />16.</Context>优点:简单缺点:重用性差第二种:配置全局JNDI数据源,应用到单个应用1. 在Tomcat的server.xml中GlobalNamingResources节点,在节点下加一个全局数据源1.<Resource name="jndi/testdb"//指定的jndi名称,会用于spring数据源bean的配置和2.auth="Container"3.type="javax.sql.DataSource" //数据源床型,使用标准的javax.sql.DataSource4.driverClassName="com.mysql.jdbc.Driver"//JDBC驱动器5.url="jdbc:mysql://localhost:3306/appdb"//数据库URL地址ername="root"//数据库用户名7.password="123456"//数据库密码8.maxActive="20"9.maxIdle="10"//最大的空闲连接数10.maxWait="10000" //当池的数据库连接已经被占用的时候,最大等待时间11.removeAbandoned="true"12.removeAbandonedTimeout="180"13.logAbandoned="true"//被丢弃的数据库连接是否做记录,以便跟踪14.factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"15./>2. 在Tomcat的server.xml找到要应用此JNDI数据源的工程Context节点,增加对全局数据源的引用ResourceLink1.<Context docBase="WebApp"path="/WebApp"reloadable="true">2.<ResourceLink global="jdbc/mysql"name="jdbc/mysql"type="javax.sql.DataSource"/>3.</Context>优点:重用性,可控性缺点:配置相对第三种方法要繁琐一点,每个工程都得配第三种:配置全局JNDI数据源,应用到所有Tomcat下部署的应用1 配置tomcat单个全局数据源。
Tomcat配置数据源(JNDI方式)一、直连接数据库1 Java 连接Oralce[java]view plaincopy1.Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();2.String url="jdbc:oracle:thin:@localhost:1521:orcl";3.Connection conn= DriverManager.getConnection(url,user,password);2 Java 连接MySQL[java]view plaincopy1.Class.forName("org.gjt.mm.mysql.Driver ").newInstance();2.String URL = "jdbc:mysql://localhost/test";3.Connection conn= DriverManager.getConnection(url,user,password);3 Java 连接SQLServer[java]view plaincopy1.Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver ").newInstance();2.String URL =” jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";3.Connection conn= DriverManager.getConnection(url,user,password);4 Java 连接DB2[java]view plaincopy1.Class.forName(“com.ibm.db2.jdbc.app.DB2Driver ").newInstance();2.String URL =”jdbc:db2://localhost:5000/sample";3.Connection conn= DriverManager.getConnection(url,user,password);5 Java 连接Infomix[java]view plaincopy1.Class.forName("rmix.jdbc.IfxDriver ").newInstance();2.String URL =jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver3.Connection conn= DriverManager.getConnection(url,user,password);6 Java 连接SyBase[java]view plaincopy1.Class.forName("com.sybase.jdbc.SybDriver").newInstance();2.Properties sysProps = System.getProperties();3.SysProps.put("user","userid");4.SysProps.put("password","user_password");5.Connection conn= DriverManager.getConnection(url, SysProps);7 Java连接PostgreSQL[java]view plaincopy1.Class.forName("org.postgresql.Driver").newInstance();2.String url ="jdbc:postgresql://localhost/soft"3.Connection conn= DriverManager.getConnection(url,user,password);二、tomcat连接数据库(JNDI连接)1、先在自己应用程序WEB-INF目录下的web.xml添加以下语句:[html]view plaincopy1.<resource-ref>2.<descrtiption>引用资源说明</descrtiption>3.<res-ref-name>引用资源的JNDI名</res-ref-name>4.<res-type>引用资源的类名</res-type>5.<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->6.</resource-ref>然后在tomcat目录/conf/server.xml文件里相应的<Context>元素,添加如下子元素:[html]view plaincopy1.<Resource name="引用资源的JNDI名"auth="Container"type="javax.sql.DataSource"2.driverClassName="com.pointbase.jdbc.jdbcUniversalDriver(自己的jdbc驱动)"3.url="jdbc:pointbase:server://localhost/acme(数据库连接url)"ername="root(用户名)"password="root(密码)"maxActive="20(连接池dbcp的相关配置)"maxIdle="10"maxWait="10000"/>2、例子:以下是我的假设的项目ACMEWeb:在相应程序的web.xml里添加[html]view plaincopy1.<web-app ....>2. .....3.<resource-ref>4.<res-ref-name>jdbc/AcmeDB</res-ref-name>5.<res-type>javax.sql.DataSource</res-type>6.<res-auth>Container</res-auth>7.</resource-ref>8.</web-app>然后再server.xml里修改:[html]view plaincopy1.<Context path="/ACMEWeb"reloadable="true"docBase="E:\eclipseproject\ACMEWeb"workDir="E:\eclipseproject\ACMEWeb\work">2.<Resource name="jdbc/AcmeDB"auth="Container"type="javax.sql.DataSource"driverClassName="com.pointbase.jdbc.jdbcUniversalDriver"url="jdbc:pointbase:server://localhost/acme"username="root"password="root"maxActive="20"maxIdle="10"maxWait="10000"/>3.</Context>建议你把上面的内容编写成为一个xml文件,拷到conf/Catalina/<主机名>/文件夹下------------[html]view plaincopy1.<Resource auth="Container(管理者)"name="jdbc/DBDeveloper(引用资源的JNDI名)"type="javax.sql.DataSource(引用资源的类名)"/>2.<ResourceParams name="jdbc/DBDeveloper(引用资源的JNDI名)">3.<parameter>4.<name>maxActive</name>5.<value>20</value>6.</parameter>7.<parameter>8.<name>maxIdle</name>9.<value>10</value>10.</parameter>11.<parameter>12.<name>maxWait</name>13.<value>-1</value>14.</parameter>15.16.<!-- SQL Server 2000 -->17.<parameter><name>username</name><value>sa</value></parameter>18.<parameter><name>password</name><value>enter</value></parameter>19.<parameter>20.<name>driverClassName</name>21.<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value></parameter>22.<parameter>23.<name>url</name>24.<value>jdbc:microsoft:sqlserver://infor:1433;DatabaseName=infordb</value>25.</parameter>26.27.<!-- Oracle8i -->28. <!--29.<parameter>30.<name>factory</name>31.<value>mons.dbcp.BasicDataSourceFactory</value>32.</parameter>33.<parameter>34.<name>driverClassName</name>35.<value>oracle.jdbc.driver.OracleDriver</value>36.</parameter>37.<parameter>38.<name>url</name>39.<value>jdbc:oracle:thin:@192.168.0.170:1521:infordb</value>40.</parameter>41.<parameter>42.<name>username</name>43.<value>system</value>44.</parameter>45.<parameter>46.<name>password</name>47.<value>manager</value>48.</parameter>49. -->50.51.<!-- DB2 -->52. <!--53.<parameter>54.<name>driverClassName</name>55.<value>.DB2Driver</value>56.</parameter>57.<parameter>58.<name>url</name>59.<value>jdbc:db2://infor/infordb</value>60.</parameter>61.<parameter>62.<name>username</name>63.<value>db2admin</value>64.</parameter>65.<parameter>66.<name>password</name>67.<value>db2admin</value>68.</parameter>69. -->70.71.</ResourceParams>--------------------------------------------------------------------------JNDI是J2EE中一个很重要的标准,通常我们是在EJB编程中用到,Tomcat4.0中提供了在JSP和Servelt中直接使用JNDI的方法,下面谈一下在Tomcat4.0中配置和使用JNDI的方法(以通过JNDI连接数据库为例)假设使用的数据库是mysql,实验例子在TOMCAT_HOME/webapps/DBTest目录中A.将mysql的JDBC连接库mm.mysql-2.0.9-bin.jar放入TOMCAT_HOME/common/lib中B.配置TOMCAT_HOME/conf/serer.xml文件在<Service>段中加入一个Context: [html]view plaincopy1.<Context path="/DBTest"docBase="DBTest"2.debug="5"reloadable="true"crossContext="true">3.</Context>这是DBTest的根路径,这是为了在DBTest中使用做准备.C.在上面加入的<Context>段加入[html]view plaincopy1.<Resource name="jdbc/TestDB"2.auth="Container"3.type="javax.sql.DataSource"/>4.<ResourceParams name="jdbc/TestDB">5.<parameter>6.<name>factory</name>7.<value>mons.dbcp.BasicDataSourceFactory</value>8.</parameter>9.<!-- 最大连接数10.-->11.<parameter>12.<name>maxActive</name>13.<value>100</value>14.</parameter>15.<!-- 最大空闲连接 -->16.<parameter>17.<name>maxIdle</name>18.<value>30</value>19.</parameter>20.<!-- 最大等待连接 -->21.<parameter>22.<name>maxWait</name>23.<value>10000</value>24.</parameter>25.<!-- MySQL 连接用户信息 -->26.<parameter>27.<name>username</name>28.<value>test</value>29.</parameter>30.<parameter>31.<name>password</name>32.<value>test</value>33.</parameter>34.<!-- MySQl驱动 -->35.<parameter>36.<name>driverClassName</name>37.<value>org.gjt.mm.mysql.Driver</value>38.</parameter>39.<!-- MySQL连接地址 -->40.<parameter>41.<name>url</name>42.<value>jdbc:mysql://localhost:3306/test</value>43.</parameter>44.</ResourceParams>我们可以将按照Sample加入,主要修改的是driverClassName,url,和用户帐号;需要强调的是"jdbc/TestDB"就是JDNI要查找的Name.D. 在JSP或servlet中使用JNDI查找服务下面是在JSP文件中关于JNDI使用的代码(文件名记为UserHandleDB.jsp)需要注意的是JNDI NAME要在前面加上"java:comp/env/"[html]view plaincopy1.<%@ page language="java"%>2.<%@ page import="java.util.*" %>3.<%@ page import="java.sql.*" %>4.<%@ page import="javax.sql.*" %>5.<%@ page import="javax.naming.*" %>6.<%7.String jndi_name="java:comp/env/jdbc/TestDB";8.String select_user_sql="select userid,name,birthday, email from emp";9.String colnames[][]={{"User ID","Name","Birth day","EMail"},10.{"userid","name","birthday","email"}};11.Vector userSet=new Vector();12.Vector columnSet=new Vector();13.for(int i=0;i<colnames[0].length;i++){14.columnSet.add(colnames[0][i]);15.}erSet.add(columnSet);17.Context ctx = new InitialContext();18.if(ctx == null )19.throw new Exception("No Context");20.DataSource ds = (DataSource)ctx.lookup(jndi_name);21.Connection conn = ds.getConnection();22.try {23.PreparedStatement psPreparedStatement=conn.prepareStatement(select_user_sql);24.ResultSet resultSet = psPreparedStatement.executeQuery();25.while(resultSet.next()){26.columnSet=new Vector();27.for(int i=0;i<colnames[1].length;i++){28.columnSet.add(resultSet.getString(colnames[1][i]));29.}erSet.add(columnSet);31.}32.}catch(SQLException e) {33.e.printStackTrace();34.}finally {35.conn.close();36.%>37.E. 引用UserHandleDB.jsp(记为ViewTable.jsp)38.<html>39.<head>40.<title>Test Database </title>41.<body>42.<%@ include file="UserHandleDB.jsp" %>43.<table border="1">44.<%45.for(int i=0;i<userSet.size();i++){46.Vector colSet=(Vector)userSet.get(i);47.out.print("<tr>");48.for(int j=0;j<colSet.size();j++){49.String col=(String)colSet.get(j);50.out.print("<td>"+col+"</td>");51.}52.out.print("</tr>");53.}54.%>55.</table>56.</body>57.</html>F. 在web.xml中加入[html]view plaincopy1.<resource-ref>2.<description>DB Connection</description>3.<res-ref-name>jdbc/TestDB</res-ref-name>4.<res-type>javax.sql.DataSource</res-type>5.<res-auth>Container</res-auth>6.</resource-ref>这里的jdbc/TestDb要和C中Resource段的name匹配G. 观察结果首先确定数据库已经启动,接着启动Tomcat,如果Tomcat启动异常,可能的原因是数据库的JDBC库没有加载最后打开浏览器,访问http://localhost:8080/DBTest/ViewTable.jsp就可以看到结果=============================================================== ======一、数据源简介:************************************************************************************在Java语言中,DataSource对象就是一个代表数据源实体的对象。