欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JNDI与数据库连接池

程序员文章站 2022-04-19 14:07:54
在javaweb程序中,最消耗资源的就是与数据库的交互,所以在与数据库交互上有很多方式进行优化这次说的是通过减少建立连接与销毁连接来优化的连接池。数据库连接池负责分配、管理和释放连接,让程序重复使用同一个连接,而不是每次都要创建新连接数据库连接池在初始化时创建一定数量的数据库连接放到连接池中, 这个数量是设定的最小连接数,连接池都将一直保证至少拥有这么多的连接当程序向连接池请求的连接......

  在javaweb程序中,最消耗资源的就是与数据库的交互,所以在与数据库交互上有很多方式进行优化
这次说的是通过减少建立连接与销毁连接来优化的连接池。

数据库连接池负责分配、管理和释放连接,让程序重复使用同一个连接,而不是每次都要创建新连接
数据库连接池在初始化时创建一定数量的数据库连接放到连接池中, 这个数量是设定的最小连接数,连接池都将一直保证至少拥有这么多的连接
当程序向连接池请求的连接数超过设置的最大连接数量时,这些请求将被加入到等待队列中.

下列是tomcat的数据源配置,通过JNDI去连接数据源

在tomcat目录中conf/context.xml,我的数据库是mysql8

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    
    <Resource name="jdbc/zhangshuo" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
    username="root" password="123456" driverClassName="com.mysql.cj.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/zhangshuo?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true"
    />
</Context>

 

name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
      为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。
auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type:此名称所代表的类型,现在为javax.sql.DataSource
maxActive:表示一个数据库在此服务器上所能打开的最大连接数
maxIdle:表示一个数据库在此服务器上维持的最小连接数
maxWait:最大等待时间。10000毫秒
username:数据库连接的用户名
password:数据库连接的密码
driverClassName:数据库连接的驱动程序
url:数据库连接的地址

 

在项目的web.xml中连接数据源

<web-app>
    <resource-ref>
        <description>news DataSource</description>
        <res-ref-name>jdbc/zhangshuo</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

完成以上步骤就可以编写代码了
以前需要实例化的连接对象现在可以用数据源实例化

Context context=new InitialContext();
DateSource ds=()context.lookup("java:comp/env/jdbc/zhangshuo");
Connection con=ds,getConnection();

在连接后就不用关闭连接了,交给连接池管理

本文地址:https://blog.csdn.net/DT_Zhangshuo/article/details/85951340