Tomcat使用数据库连接池数据库

news2024/11/18 15:50:26

 1.连接池技术的作用

数据池允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。这项技术能明显地提高对数据库操作的性能。

2.什么是连接池技术

        数据库连接池在初始化时将创建一定数量的数据库连接,具体数量的由连接池的最小数据库连接数来设定。无论这些数据库是否被使用,连接池都将确保至少拥有这些数量的连接。同时,连接池可以根据池中连接的使用率,动态增加或减少池中的连接数。Java程序访问数据库时,只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束时,再将数据库连接返回给连接池,这样做可以提高访问数据库的效率。

        已经创建但尚未分配出去的连接被存放到一个空闲池中,每当用户请求一个链接时,系统首先检查空闲池内有没有空闲连接。如果有就分配一个连接给用户;如果没有则检查当前连接池是否已达到所允许的最大连接数(连接池的最大数据库连接数量限制了这个连接池能占有的最大连接数),如果没有达到,就新建一个连接。如果已经达到,这些请求将被加入等待列队中。如果在等待的时间内有连接被释放出来,就可以把这个连接分配给等待的用户。需要注意的是,系统对已经分配出去正在使用的连接只做计数,当使用完后,应释放连接并返还给空闲池。

3.数据源与JNDI资源

        数据源(Data Source)是在JDBC2.0中引入的一个概念。在JDBC扩展包中定义了javax.sql.DataSource接口,它定义了一组特性,用于确定和描述它所表示的现实存在的数据源,配置好的数据库连接池也以DataSource的形式存在。其中现类负责与数据库建立连接,创建连接对象,这些数据库连接保存在连接池中。在应用程序中访问数据库时不必编写连接数据库的代码,可以直接从数据源获得数据库连接。

        Tomcat把数据源作为一种可配置的JNDI资源来处理,DataSouce对象由Web容器(Tomcat)提供。在Tomcat环境中,如果发布一个数据源实例,那么Web应用可以通过JNDI进行访问,通过该数据源实例为Web应用提供数据库连接池机制,从而简化Web应用的数据库连接管理问题。

4.配置数据源

以Tomcat为例,实现数据源的配置和使用,

1.通过context.xml文件配置JNDI资源

在本地Tomcat的配置文件中的context.xml文件中添加<Environment>元素配置公共资源,而配置数据源时,需要在该文件中添加<Resource>元素。代码如下:

<Resource name="jdbc/Mysql"
      auth="Container"
      type="javax.sql.DataSource"
      maxTotal="100"
      maxIdle="30"
      maxWaitMillis="10000"
      username="root"
      password="ZX20040825"
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://127.0.0.1:3306/microblog?
      useUnicode=true&amp;serverTimezone=GMT-8&amp;
      characterEncoding=UTF-8"
/>
DataSource对象参数对应的<Resource>元素属性
属性说明
name指定资源的JNDI名字
auth指定管理资源的Manager,他有Container和Application两个可选值。Container表示由容器创建Resource,Application表示由Web应用创建和管理Resource
type指定资源所属的java类型
maxTotal可同时从连接池分配的最大连接数。默认值为8,设置为负数表示不受限制
maxIdle同时在连接池中处于空闲状态的最大连接数,默认值为8,设置为负数表示不受限制
minIdle同时在连接池中处于空闲状态的最小连接数,默认值为0
maxWaitMillis当连接池没有可用连接时,等待获取连接的最大毫秒数,如果超出这一时间将会抛出异常,默认值为-1,表示可以无限等待
username指定连接数据库的用户名
password指定连接数据库的口令(密码)
driverClassName指定连接数据库的JDBC驱动程序
url指定连接数据库的URL

 提示:不同的web服务器设置数据源的方法也是不一样的,应根据服务器提供的帮助文档进行配置

2.在项目中配置web.xml文件

在java web应用的web.xml文件中,为<web-app>节点添加<resource-ref>元素。代码如下:

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

 这里,<resource-ref>元素包含一个对外部资源的引用,它包含一个可选的description,一个引用资源的名称(相对于java:comp/env环境的JNDI名)、资源类型、验证方式。

<resource-ref>元素的属性
属性说明
description对引用资源的说明
res-ref-name指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应
res-type指定所引用资源的Java类型,与<Resource>元素中的type属性对应
res-auth指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应

3.添加数据库驱动文件

要通过数据源访问数据库,还要添加数据库驱动文件。由于数据源由Tomcat创建并维护,所以要把数据库驱动文件放到Tomcat的lib目录下,也可以放到项目中web/WEB-INF/lib下,并添加为库。

4.编码获取数据源对象

然后在连接数据库方法中:

//在用JNDI连接数据库时用main函数测试时总报错,
//InitialContext 是要在应用服务器的上下文里才有的。
//在普通的应用程序里是不行的!
//要放到tomcat里面运行!
//不能用main函数直接测试,只能放到tomcat或者servlet、jsp显示
Context ctx=new InitialContext();
//后面的jdb/Mysql是Context文件里配置的信息
DataSource ds=(DataSource) ctx.lookup("java:comp/env/jdbc/Mysql");
Connection conn=ds.getConnection();

写入上面代码就连接完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Uniswap v3?

目录 1. 集中化流动性&#xff1a;2. 集中化资金池管理&#xff1a;3. 多个流动性池&#xff1a;4. 高级订单类型&#xff1a;5. 协议费用优化&#xff1a; Uniswap v3 是去中心化交易所 Uniswap 的第三个主要版本&#xff0c;它于2021年5月发布。相比于 Uniswap v2&#xff0c…

内嵌tomcat使用方式(读取web.xml)

pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

微信小程序之单选题按钮切换背景

先来效果图 未选效果 已选效果 上代码 <view class"questionClass">问题1&#xff1a;夜晚落地西安咯&#xff0c;你最想先去哪里看看呢&#xff1f;</view><view class"single"><ul class"box"><li v-for"(s,i…

Python获取豆丁文档数据内容, 保存word文档

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8 pycharm 模块使用: requests --> pip install requests re base64 docx --> pip install python-docx 第三方模块安装方法&#xff1a; win R 输入cmd 输入安装命令 pip install …

第N4周:使用Word2vec实现文本分类

目录 二、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 二、模型构建1.搭建模型2.初始化模型3.定义训练与评估函数 三、训练模型1.拆分数据集并运行模型2.测试指定数据 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&…

原子操作CAS

CAS 悲观锁 具有强烈的独占和排他特性。在有悲观锁的情况下&#xff0c;对数据进行处理&#xff0c;数据会处于锁定状态。前面讲到的synchronized同一时间只允许一个线程访问某块资源&#xff0c;其他线程处于阻塞状态&#xff0c;就是一个独占锁&#xff0c;是悲观锁中的一种…

语义分割大模型SAM论文阅读(二)

论文链接 Segment Anything 开源代码链接 SAM 论文阅读 摘要 We introduce the Segment Anything (SA) project: a new task, model, and dataset for image segmentation. Using our efficient model in a data collection loop, we built the largest segmentation dat…

Presto启动报错:No such file or directory

1. 问题描述 1.1 无法通过sudo -u presto启动 使用低版本的Presto时&#xff0c;在root用户下&#xff0c;通过如下命令切换到presto用户、启动Presto服务&#xff1a; sudo -u presto /install_dir/bin/launcher start # 或直接restart&#xff0c;包含stop和start操作 sudo …

12.3 ARM寄存器组织

目录 ARM寄存器组织&#xff08;一&#xff09; 寄存器 概念 作用 分类 ARM寄存器 ARM寄存器组织&#xff08;二&#xff09; 专用寄存器 R15(PC,Program Counter) R14(LR,Link Register) R13(SP,Stack Pointer) ARM寄存器组织&#xff08;三&#xff09; CPSR寄存…

【Vue面试题系列】二

Vue3中的Treeshaking特性是什么&#xff1f;并举例说明。 是什么&#xff1f; treeshaking是一种通过清除多余代码方式来优化项目打包体积的技术。 简单来讲&#xff0c;就是在保持代码运行结果不变的前提下&#xff0c;去掉无用的代码。 如果把代码打包比作制作蛋糕&#xff…

将xxl-job集成到自己的项目中,部署并测试

文章目录 1、添加依赖2、application.yml 配置3、 新建配置类4、创建任务5、将项目打包&#xff0c;在服务器上运行6、编辑执行器机器地址7、测试 1、添加依赖 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId>…

常见排序算法—面试编程题2023

常见排序算法—面试编程题2023 最近在看一些面试题&#xff0c;发现很多面试过程中都会要求手写排序编程题&#xff0c;经过一番查找整理&#xff0c;可以快速学习和使用相关排序算法题&#xff0c;通俗易懂&#xff0c;手撕代码吊打面试官。 一、冒泡排序 冒泡排序 是一种简…

ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法

ETHERNET/IP和ETHERCAT是两种不同的协议&#xff0c;它们在工业生产中都有广泛的应用。然而&#xff0c;由于协议不同&#xff0c;这两种设备之间无法通讯&#xff0c;这给工业生产带来了很大的麻烦。而远创智控YC-EIP-ECT网关应运而生&#xff0c;它能够连接到ETHERNET/IP总线…

路径规划算法:基于世界杯优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于世界杯优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于世界杯优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

合合信息AI图像内容安全新技术亮相WAIC2023,防范“生成式造假”

开年以来&#xff0c;多个图像生成软件在全球迅速蹿红&#xff0c;其作画逼真程度“技惊四座”。AI一路“狂飙”&#xff0c;让生成、篡改等多形式的图片伪造的门槛变得更低&#xff0c;由此引发的隐患也令人忧虑。 图像是信息的主要载体之一&#xff0c;利用AI进行图像造假的…

MachineLearningWu_4_GradientDescent

我们在上一个章节中学习了损失函数&#xff0c;我们的最终目的是要求得损失函数最小化的weight和bias&#xff0c;那么如何做到这一点呢&#xff0c;我们引入梯度下降算法&#xff0c; 请注意&#xff0c;对于Linear Regression MSE&#xff0c;你得到的J(w, b)和w, b的图必然…

AIGC - Stable Diffusion 多重控制网络 ControlNet (OpenPose + Depth) 配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131603523 Multi-ControlNet 是 Stable Diffusion 的一个功能&#xff0c;让用户用不同的空间条件来控制图像生成的过程。例如&#xff0c;可以用…

【高并发网络通信架构】2.引入多线程实现多客户端连接的tcp服务端

目录 一&#xff0c;往期文章 二&#xff0c;代码实现 一&#xff0c;往期文章 【高并发网络通信架构】1.Linux下实现单客户连接的tcp服务端 二&#xff0c;代码实现 关键代码 因为accept是阻塞等待客户端连接&#xff0c;当客户端连接成功后才会执行accept后面的代码&…

简介Maven结构与配置方法

一、Maven是什么 Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 它有什么用呢&#xff1f; 比如我以前要IOUtils这个包&#xff0c;那要到网站下去下载下来&#xff0c;再导入。 当jar包多的时候&#xff0c;一个一个导出&#xff0c;…

开源Cillium项目为容器提供强大的网络功能

试验性的开源Cillium项目使用Linux内核的一项现有特性&#xff0c;为容器提供高速、强大的网络功能。一项名为Cilium的开源项目试图基于Linux内核中所用的技术&#xff0c;为容器提供一种新的网络方法。 试验性的开源Cillium项目使用Linux内核的一项现有特性&#xff0c;为容器…