JNDI数据库连接池

JNDI的全称是java命名与目录接口(Java Naming and Directory Interface),是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。我们可以把JNDI简单地理解为是一种将对象和名字绑定的技术,即指定一个资源名称,将该名称与某一资源或服务相关联,当需要访问其他组件和资源时,就需要使用JNDI服务进行定位,应用程序可以通过名字获取对应的对象或服务。

JNDI方式 - 配置Tomcat6.0 连接池 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调整提供依据。

步骤 1. Install Your JDBC Driver 安装jdbc驱动程序到tomcat的lib 2. 在web.xml中加入数据源的名字的配置

res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应。

res-type:指定所引用资源的类名字,与<Resource>元素中的type属性对应。

res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应。
<resource-ref>
    <res-ref-name>jdbc/progrart</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  1. 修改dBhelper中获取联接的代码,将联接的获取转给tomcat.
//获取数据库联接
    public Connection getCon() throws SQLException{
        //MyProperties mp = MyProperties.getInstance();
        //Connection con = DriverManager.getConnection(mp.getProperty("url"), 
                                //mp.getProperty("username"),  mp.getProperty("password") );


        Connection con=null;

        try {
            Context initCtx=new InitialContext();

            Context envCtx=(Context) initCtx.lookup("java:comp/env");
            DataSource ds=(DataSource)envCtx.lookup("jdbc/progrart");

            con=ds.getConnection();
        } catch (NamingException e) {

            e.printStackTrace();
        }
        return con;

    }
  1. 在tomcat的conf/context.xml中加入资源的配置,联接数据库的相关配置( 用户名,密码,url, 驱动名)
<!--
        name:指定Resourced JNDI的名称
        auth:指定管理Resourced的manager(Container:由容器创建和管理 Application:由web应用创建和管理 );
        type:指定Resource所属的Java类
        username:连接数据库的用户名
        password:连接数据库的密码
        autoReconnect:当数据库连接异常中断时,是否自动连接
        autoReconnectForPools:是否使用针对数据库连接池的重连策略
        maxActive:连接池中同意时刻内所提供的最大活跃的连接数
        maxIdle:连接池处于空闲状态时的数据库连接的最大数目
        maxWait:当连接池无连接时的最大等待毫秒数
        driverClassName:指定连接数据库的JDBC驱动程序。

        url:指定连接数据库的URL。
    -->
    <Resource
        name="jdbc/progrart"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"
        username="root"
        password="a"
        url="jdbc:mysql://localhost:3306/progrart"
        autoReconnect="true"
        autoReconnectForPools="true"
        maxActive="100"
        maxIdle="50"
        maxWait="3000"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        logAbandoned="true"
    />
    <Resource
        name="jdbc/res"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"
        username="root"
        password="a"
        url="jdbc:mysql://localhost:3306/res"
        autoReconnect="true"
        autoReconnectForPools="true"
        maxActive="100"
        maxIdle="50"
        maxWait="3000"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        logAbandoned="true"
    />


    <Resource
        name="jdbc/userInfo"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        username="scott"
        password="a"
        url="jdbc:oracle:thin:@127.0.0.1:1521:orclyc"
        autoReconnect="true"
        autoReconnectForPools="true"
        maxActive="100"
        maxIdle="50"
        maxWait="3000"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        logAbandoned="true"
    />

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

29 条运维工程师必会实用 Linux 命令

虽然Linux发行版支持各种各样的饿GUI(graphical user interfaces),但在某些情况下,Linux的命令行接口(bash)仍然是简单...

3219
来自专栏TechBox

iOS经典错误Undefined symbols for architecture XXX:

3253
来自专栏大内老A

从数据到代码——通过代码生成机制实现强类型编程[下篇]

在《上篇》中,我们实现了将保存有消息条目的XML向CodeDOM的转换,即是将XML文件生成一个CodeCompileUnit对象,而该CodeCompileU...

2076
来自专栏博岩Java大讲堂

Java日志体系(log4j)

75211
来自专栏张善友的专栏

利用Windows性能计数器(PerformanceCounter)监控

一、概述 性能监视,是Windows NT提供的一种系统功能。Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种...

3429
来自专栏腾讯Bugly的专栏

美女程序媛发福利,读懂ANR的trace文件So easy

想要分析ANR问题,读懂trace文件是关键。Trace文件到底是什么鬼?如何才能破解深藏其中的奥义? App的进程发生ANR时,系统让活跃的Top进程都进行了...

4145
来自专栏逸鹏说道

小解Redis 系列

官网:http://redis.io/ 推荐一个开源组件:StackExchange.Redis https://github.com/StackExchang...

3079
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第三十一天 WebService学习【悟空教程】

简单的网络应用使用单一语言写成,它的唯一外部程序就是它所依赖的数据库。大家想想是不是这样呢?

2234
来自专栏步履前行

Spring Retry

  在我们的业务场景中,经常要调用其他的API来获取信息,比如我们的业务场景需要依赖个人信息来处理,这个时候调用个人信息服务的API,但是由于可能同一时段多方在...

4113
来自专栏编程软文

快速上手友盟推送前后端

3235

扫码关注云+社区

领取腾讯云代金券