• 配置Tomcat数据源


             Tomcat提供了 两种配置数据源的方式,这两种方式所配置的数据源访问范围不同:一种数据源可以让所有的Web运用都访问,被称为全局数据源;另一种只能在单个Web运用中访问,被称为局部数据源。

        不管配置那种数据源,都需要提供特定的数据库JDBC驱动。本书以MySQL为例来配置数据源,所以读者必须将MySQL的JDBC驱动程序复制到Tomcat的lib路径下

        局部数据源无需修改系统的配置文件,之需要修改用户自己的Web部署文件,不会造成系统的混乱,而且数据源被封装在一个Web运用之内,防止被其他的Web运用访问,提供了更好的封装性。

        局部数据源只与特定的Web运用相关,因此在该Web运用对应的部署文件中配置。例如,为上篇的Web运用增加局部数据源,修改Tomcat下 conf /Catalina/localhost 的webDemo.xml 文件即可。为 Context元素增加一个Resource子元素;增加局部数据源的 webDemo.xml文件内容如下:

     1 <?xml version='1.0' encoding='utf-8'?>
     2 <Context docBase="D:/webapps/webDemo" path="/webDemo" privileged="true" reloadable="true">
     3     <!-- maxActive: Maximum number of database connections in pool. Make sure you
     4          configure your mysqld max_connections large enough to handle
     5          all of your db connections. Set to -1 for no limit.
     6          -->
     7 
     8     <!-- maxIdle: Maximum number of idle database connections to retain in pool.
     9          Set to -1 for no limit.  See also the DBCP documentation on this
    10          and the minEvictableIdleTimeMillis configuration parameter.
    11          -->
    12 
    13     <!-- maxWait: Maximum time to wait for a database connection to become available
    14          in ms, in this example 10 seconds. An Exception is thrown if
    15          this timeout is exceeded.  Set to -1 to wait indefinitely.
    16          -->
    17 
    18     <!-- username and password: MySQL username and password for database connections  -->
    19 
    20     <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
    21          org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
    22          Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
    23          -->
    24 
    25     <!-- url: The JDBC connection url for connecting to your MySQL database.
    26          -->
    27 
    28   <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
    29                maxActive="100" maxIdle="30" maxWait="10000"
    30                username="root" password="" driverClassName="com.mysql.jdbc.Driver"
    31                url="jdbc:mysql://localhost:3306/javatest"/>
    32 </Context>

       上面的Resource 元素为该Web运用配置了一个局部数据源,该元素的个属性指定了数据源的各种配置信息。

       

        其实DBCP  运用到了 JNDI 技术 Java Naming Directory Interface 即 Java命名和目录接口,听起来非常专业 其实很简单:就是为某个Java对象起一个名字。我们知道 我们通常获得一个对象 是通过 new 创建,而通过JNDI 这种技术 我们 只需要通过 对象的别名即可访问,其实就是Java的一种对象访问技术,我们可以这样理解 我们通过 网址访问 某个页面,你可以把对象类比为 一个页面 ,而它的 别名 就是 网址。通过这种 服务端/客户端 的方式 我们可以在任何地方 访问这个对象,只要有这个对象提供了JNDI服务。

        再次启动Tomcat 该web运用即可通过该JNDI 名字来访问该数据源。下面是测试访问数据源的 代码清单:

        SQL代码:

     

    1 create database javatest;
    2 use javatest;
    3 create table testdata (
    4     id int not null auto_increment primary key,
    5     foo varchar(25),
    6     bar int);
    7 insert into testdata values(null, 'hello', 12345);

    web.xml 文件

     1 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     4 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     5     version="2.4">
     6   <description>MySQL Test App</description>
     7   <resource-ref>
     8       <description>DB Connection</description>
     9       <res-ref-name>jdbc/TestDB</res-ref-name>
    10       <res-type>javax.sql.DataSource</res-type>
    11       <res-auth>Container</res-auth>
    12   </resource-ref>
    13 </web-app>

     test.jsp页面

     1 <%@page import="java.sql.ResultSet"%>
     2 <%@page import="java.sql.Statement"%>
     3 <%@page import="java.sql.Connection"%>
     4 <%@page import="javax.sql.DataSource"%>
     5 <%@page import="javax.naming.InitialContext"%>
     6 <%@page import="javax.naming.Context"%>
     7 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     8 
     9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    10 <html>
    11     <head>
    12         <title>test</title>
    13 
    14         <meta http-equiv="pragma" content="no-cache">
    15         <meta http-equiv="cache-control" content="no-cache">
    16         <meta http-equiv="expires" content="0">
    17         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18         <meta http-equiv="description" content="This is my page">
    19 
    20     </head>
    21 
    22     <body>
    23         <%
    24             //初始化 Context ,使用 InitialContext初始化Context
    25             Context ctx = new InitialContext();
    26             //通过JNDI查找数据源,该JNDI 为 java:comp/env/jdbc/TestDB 分成两个部分
    27             //java:comp:/env 是Tomcat固定的,Tomcat提供的JNDI绑定都必须加该前缀
    28             //jdbc/TestDB 是定义数据源时的数据源名
    29             DataSource ds = (DataSource) ctx
    30                     .lookup("java:comp/env/jdbc/TestDB");
    31             Connection conn = ds.getConnection();
    32             Statement stmt = conn.createStatement();
    33             ResultSet rs = stmt.executeQuery("select * from testdata");
    34             while (rs.next()) {
    35                 out.println(rs.getString(2));
    36             }
    37         %>
    38     </body>
    39 </html>

      上面的29行代码实现了 JNDI查找数据源对象,一旦获取了该数据源对象,程序就可以通过该数据源取得数据库连接,从而访问数据库。

      上面的方式 是 访问局部数据源,如果需要配置全局数据源,则应通过修改 server.xml 文件来实现。全局数据源的配置与局部数据源的配置基本类似,只是修改的文件不同。局部数据源只需要修改Web运用的配置文件,而全局数据源需修改Tomcat的 server.xml 文件:(使用全局数据源需要修改Tomcat原有的server.xml,所以可能导致破话Tomcat系统,因而尽量避免使用全局数据源)

  • 相关阅读:
    (转)图文并茂详解VisualStudio使用技巧一
    使用VS2005的 ClickOnce 技术实现按需下载组件
    (转)VS2005 SP1发布,解决只能创建WebSite,无法创建Web Application项目的问题
    .NET设计规范笔记1
    No error message available, result code: E_FAIL(0x80004005)
    SSL SettingsClient certificates
    处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    添加IIS_IUSRS
    DTS,复制到同一服务器下
    在IIS7.5上配置Https,SSL
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/Tomcat_DBCP.html
Copyright © 2020-2023  润新知