• Tomcat数据源


    Tomcat数据源原理,配置,使用

    在程序中,使用数据源是可以提升操作性能的,这种性能 的提升依靠运行的操作原理。

    传统的JDBC操作:

    1. 加载数据库驱动,通过CLASSPATH配置

    2. 通过DriverManager类取得数据库连接对象

    3. 通过Connection实例化PreparedStatement对象,编写SQL命令操作数据库

    4. 数据库属于资源操作,操作完成后,进行数据库的关闭以释放自愿

    对于不同的用户只有操作3不同,而对于1,2,4三个步骤都属于重复的操作。

    如果开发中直接使用JDBC操作的话,就会产生性能的问题。怎么做更合适呢?

    如果假设数据库不关闭,以后如果有新的用户使用的时候,直接去一个已经有的连接的话,那么

    假设有100把伞,如果现在不下雨,肯定不能把所有的伞都摆上,所以一般平常如果没有人用的时候,至少摆上10把,当然最大的时候只能提供100把伞。

    还需要一个等待的时间。

    最小维持的数据库连接数,最大允许打开的连接数,等待的时间。

    Tomcat4.1之后就开始支持这种操作了,这种操作称为数据库连接池,存放的是所有的数据库连接。

    在web容器中,数据库的连接池都是通过数据源javax.sql.DataSource访问的,即,可以通过javax.sql.DataSource类得到一个Connection对象,如果要得到一个DataSource对象需要使用JNDI进行查找。

    JNDI属于目录命名及目录查找接口,主要功能用于查找,查找对象。EJB也需要使用此概念

    但是数据库的连接池需要在tomcat上完成配置。

    配置mysql数据库连接池的语法:

    <Context path="/mldn" docBase="D:mldnwebdemo" reloadable="true">
        <Resource name="jdbc/mldn"     
            auth="Container"
            type="javax.sql.DataSource"    
            maxActive="100"     
            maxIdle="30"         
            maxWait="10000"        
            username="root"     
            password="mysqladmin"     
            driverClassName="org.gjt.mm.mysql.Driver"    
            url="jdbc:mysql://localhost:3306/mldn"/>
    </Context>

    1. 开启mysql服务

    2. 修改server.xml文件才能起作用

    此配置有几个参数:

    1. name:表示数据源的名称,也是要查找的名称

    2. auth:表示由容器负责资源的连接

    3. type:表示对象,数据源上每一个绑定的都是DataSource

    4.maxActive:最大连接数

    5. minIdle:最小维持的数量

    6. maxWait:最大等待时间

    对于连接授权有两种:Container,Application(应用程序必须程序化的登录到资源管理器,很少使用,使用Container比较多)

    如果想配置oracle,只需要更改用户名密码,还有

    driverClassName=oracle.jdbc.driver.OracleDriver

    url="jdbc:oracle:thin:@localhost:1521:MLDN"

    现在使用的tomcat版本是6.0,要想让数据源起作用,还需要更改项目中的web.xml文件:

    <resource-ref>
            <res-ref-name>jdbc/mldn</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>

    要想使用数据源的话,用以下方法

     查找数据源, 通过JNDI查找:

    1. 初始化名称查找上下文:Context ctx=new InitialContext();

    2. 通过名称查找DataSource对象:DataSource ds=(DataSource)ctx.lookup(JNDI名称);

    3. 通过DataSource取得一个数据库连接:Connection conn=ds.getConnection();

    通过JSP访问的话,代码如下:

    <%@ page contentType="text/html" pageEncoding="GBK"%>
    <%@ page import="javax.naming.*"%>
    <%@ page import="javax.sql.*"%>
    <%@ page import="java.sql.*"%>
    <html>
    <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
    <body>
    <%
        String DSNAME = "java:comp/env/jdbc/mldn" ;    // 名称
        Context ctx = new InitialContext() ;
        DataSource ds = (DataSource) ctx.lookup(DSNAME) ;
        Connection conn = ds.getConnection() ;    // 从连接池中取连接
    %>
    <%=conn%>
    <%
        conn.close() ;    // 表示将连接放回到池之中
    %>
    </body>
    </html>

    所以如果用DAO模式开发时,就可以把DatabaseConnection.java改成如下格式:

    package cn.mldn.lxh.dbc ;
    import java.sql.* ;
    import javax.sql.* ;
    import javax.naming.* ;
    public class DatabaseConnection {
        private static final String DSNAME = "java:comp/env/jdbc/mldn" ;
        private Connection conn ;
        public DatabaseConnection() throws Exception {
            Context ctx = new InitialContext() ;
            DataSource ds = (DataSource) ctx.lookup(DSNAME) ;
            this.conn = ds.getConnection() ;
        }
        public Connection getConnection(){
            return this.conn ;
        }
        public void close() throws Exception {
            if(this.conn != null){
                try{
                    this.conn.close() ;
                }catch(Exception e){
                    throw e ;
                }
            }
        }
    }
  • 相关阅读:
    设计模式大赛 -- 大话设计模式
    访问者模式 -- 大话设计模式
    puts的用处
    scanf的使用
    iOS,手势识别简单使用
    iOS,多媒体,地图相关
    iOS,文本输入,键盘相关
    iOS,XMPP本地环境搭建和框架使用
    iOS,自动布局autoresizing和auto layout,VFL语言
    iOS,图片处理
  • 原文地址:https://www.cnblogs.com/wujixing/p/5009208.html
Copyright © 2020-2023  润新知