Druid连接池的基本配置与使用

article/2025/9/15 13:23:25

Druid简介

Druid是阿里巴巴的开源连接池组件,是世界上最好的连接池之一。Druid能对数据库连接进行有效管理和重用,最大化程序执行的效率。连接池负责创建和管理连接,程序只负责取用与归还。

以下是我画的示意图:

 下面我来给大家介绍一下Druid的基本配置与使用,需要你有JDBC基础。可以跟着敲一下体验体验。

 Druid的基本配置和使用

1.创建一个普通的Java项目,导入Druid的jar包和JDBC的驱动的jar包(注意:一定不要忘了导入这两个jar包,可以手动导入到lib目录下然后导入module或者用maven导入,百度搜索Druid就能找到GitHub的页面,在里面的中文帮助里有提示)

2.然后再项目的src目录下创建一个druid-config.properties的配置文件

3.在属性配置文件中配置如下: 

driverClassName=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://localhost:3306/files

username=root

password=zc20020106

initialSize=10

maxActive=20

其中driverClassName指JDBC驱动的名字,url是连接字符串,username指数据库的用户名,password指数据库密码,initialSize指程序启动时默认创建的数据库连接数,maxActive表示如果连接数大于intitialSize的数后创建的最大连接数。

4.创建一个DruidSimple类来用于测试今天的案例。

然后再main方法中编写代码如下,注释里有对代码的详细解释:

package com.haiexijun.sample;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;public class DruidSample {public static void main(String[] args) {//1.加载属性文件Properties properties=new Properties();//DruidSample.class.getResource("src/druid-config.properties")表示获取// 当前DruidSample类路径下的属性文件的路径String propertyFile=DruidSample.class.getResource("/druid-config.properties").getPath();//下面这是一个容错的考虑,因为配置文件路径可能有中文或者空格。将要它转换为utf-8,然后对decode()进行try catchtry {propertyFile =new URLDecoder().decode(propertyFile,"UTF-8");//读取配置文件properties.load(new FileInputStream(propertyFile));} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//2.获取DataSource数据源对象(其实这里数据源可以理解为数据库),选择java.sql包下的DataSourcesConnection conn=null;PreparedStatement ps=null;ResultSet rs=null;try {DataSource dataSource= DruidDataSourceFactory.createDataSource(properties);//3.创建数据库连接,获取Connection数据库连接对象对象//eg:这里创建20个数据库连接为例for (int i = 0; i < 20; i++) {conn=dataSource.getConnection();}//下面的操作就和jdbc一样了String sql="select id from myfile";ps= conn.prepareStatement(sql);rs= ps.executeQuery();while (rs.next()){System.out.println(rs.getInt("id"));}} catch (Exception e) {e.printStackTrace();}finally {//不要忘记finally来释放资源//但是这里使用连接池关闭和不使用连接池关闭有所不同,// 使用连接池conn.close()是将连接回收到连接池中,// 不使用连接池conn.close()关闭则直接释放连接if (conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if (ps!=null){try {ps.close();} catch (SQLException e) {e.printStackTrace();}}if (rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

这里创建的是20个连接,刚好达到了最大值。如果创建21个连接,那么第21个连接的操作就要等前20个连接有一个被回收后,才会被执行操作。连接池里的连接在默认的情况下是处于sleep状态。直到程序获取连接后并对他调用。连接完成调用后执行close方法,则该连接又会回到连接池中,等待被调用。

。。。。我的项目目录结构。。。。。

 这里这是一个简单的Druid连接池案例,算是入门连接池了。但Druid的功能肯定不止如此啦,还要继续学习啊。谢谢大家的关注。有什么问题评论区见。


http://chatgpt.dhexx.cn/article/pDeeWR44.shtml

相关文章

MySQL快捷键注释

MySQL语句注释快捷键显示为CtrlOemQuestion&#xff0c;对应于我们键盘上的是Ctrl&#xff1f;

Mysql 增加表注释

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 方法一&#xff1a; mysql添加表注释 ALTER TABLE 表名 COMMENT 注释字段; 实例&#xff1a; alter table test comment 测试表&#xff1b; 方法二&#xff1a; 在创建表的时候直接增加表注释…

mysql语句中的注释方法_MySQL语句注释方式简介

MySQL支持三种注释方式&#xff1a; 1.从‘#字符从行尾。 2.从‘-- 序列到行尾。请注意‘-- (双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。 3.从/*序列到后面的*/序列。结束序列不一定在同一行中&#xff0c;因此该语法允许注释跨越多行…

MySQL注释:单行注释和多行注释,快进来理解

单行注释与多行注释 单行注释多行注释 单行注释 单行注释可以使用#注释符&#xff0c;#注释符后直接加注释内容 #注释内容单行注释可以使用- -注释符&#xff0c;- -注释符后需要加一个空格&#xff0c;注释才能生效。 -- 注释内容#和–的区别就是&#xff1a;#后面直接加注…

Mysql注释

Mysql注释 MySQL服务器支持3种注释风格&#xff1a; 从‘#’字符从行尾。 从‘-- ’序列到行尾。请注意‘-- ’(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。该语法与标准SQL注释语法稍有不同。 从/*序…

mysql注释乱码问题_mysql注释是中文乱码怎么办

mysql注释是中文乱码的解决办法&#xff1a;首先用“show variables like”命令查看数据库与服务端的字符集设置&#xff1b;然后执行语句为“set collation_serverutf8_general_ci;”即可。 mysql表注释乱码 问题 执行语句: alter table TABLE_XXX comment ‘中文号’; 结果: …

wepy开发小程序eslint报错error 'getApp' is not defined no-undef

wepy开发小程序使用getApp().globalData保存全局数据很方便&#xff0c;但是会在控制台看到很多报错&#xff1a;“error getApp is not defined no-undef”&#xff0c;这是eslint报错。 解决办法&#xff1a;在.eslintrc.js文件中加入 globals: { getApp: true } 转载于:ht…

微信小程序 关于获取用户信息的一种方法 “this.setData与getApp().globalData.userInfo“

获取用户信息&#xff1a;this.setData和getApp().globalData.userInfo; 最开始的WXML文件中&#xff0c;我们写下页面结构代码如下&#xff1a; <image class"userinfo-avatar" src"{{userInfo.avatarUrl}}" mode"cover"></image>…

JS交互逻辑——获取页面数据{{}}和全局数据const app = getApp()

JS交互逻辑 在小程序里边&#xff0c;我们就通过编写 JS 脚本文件来处理用户的操作 app.js中最外层需要App({}) &#xff0c;该函数是微信平台提供的api App({// 全局数据&#xff0c;可以在所有的子页面中使用mydata: {n: 100} }) // 页面获取全局数据的方式,app表示小程序的…

微信小程序getApp().globalData.user无法获取值

一、debug过程 在进行微信小程序的开发过程中&#xff0c;我利用如下代码获取全局变量中的username的值&#xff0c;但其结果缺如图中所示的只向数据库中存入了对应的类型即object Object。 username: getApp().globalData.user.username, 数据库结果 其中&#xff0c;全局变量…

微信小程序const app=getApp()的作用,实现page页面获取全局数据

app.js的作用 app.js是整个小程序项目的入口文件&#xff0c; 如果小程序要运行&#xff0c;第一个被执行的文件就是app.js&#xff0c;第一个被执行的代码是app.js中的onLaunch方法 在app.js中可以书写小程序的全局业务逻辑 在app.js里面&#xff0c;写上一些需要的东西&am…

uniapp中的getApp().globalDate.

获取全局变量&#xff1a; getApp().globalDate1.uni-app 在app.vue文件export default里面定义globalData&#xff0c;在其他文件则用getApp&#xff08;&#xff09;.globalData获取 2.在当前文件&#xff08;app.vue&#xff09;里面获取globalData需要用this.$options.glob…

解释微信小程序const app=getApp()的作用

const appgetApp()用来获取全局变量 const appgetApp()这就话通常在pages下的页面的js中写 来调用app.js中的globalData{} 直白一点说就是在app.js的globalData{}里写的东西 在其他页面的js的onshow中可以直接调用 例&#xff1a;

微信小程序 app=getApp()公共变量在页面间传值技巧。

1.公共变量 在开发过程中&#xff0c;避免不了会使用公共变量&#xff0c;记录共享对象状态、数据最简单的方式就是创建创建公共变量&#xff1b; 当业务逻辑变多&#xff0c;还采用这种思想就会变得危险&#xff0c;代码逻辑变得不清晰&#xff0c;慢慢就有一种代码坏味道。 …

【uniapp】uniapp的globalData以及getApp():

文章目录 一、说明文档&#xff1a;二、使用&#xff1a; 一、说明文档&#xff1a; 【官方文档】https://uniapp.dcloud.net.cn/collocation/App.html#globaldata 二、使用&#xff1a;

getapp.php,getApp.php

下载RiseClub $iosUrl https://itunes.apple.com/cn/app/riseclub/id869364498?lzh&mt8; $yingyongbao http://a.app.qq.com/o/simple.jsp?pkgnamecom.rusi.club&g_f994302; $androidUrl http://club.risecenter.com/riseclub.v1.1.2.apk; if(isset($_GET[go2Andr…

微信小程序App()方法与getApp()方法

微信小程序App()方法与getApp()方法 二者含义: App()有以下作用&#xff1a; 注册一个小程序小程序的入口方法 getApp()主要用于获取全局对象&#xff0c;然后进行全局变量和全局方法的使用 例如&#xff1a; app.js 中的 App() App({onLaunch: function(options) {cons…

《算法导论》+第四版++答案

在有关算法的书中&#xff0c;有一些叙述非常严谨&#xff0c;但不够全面&#xff1b;另一些涉及了大量的题材&#xff0c;但又缺乏严谨性。本书将严谨性和全面性融为一体&#xff0c;深入讨论各类算法&#xff0c;并着力使这些算法的设计和分析能为各个层次的读者接受。全书各…

《算法》第四版官网库及数据文件

《算法》第四版官网库及数据文件分享 最近购买了《算法》这本书&#xff0c;本来想着只是看看的&#xff0c;但是觉得还是想写写书上的代码&#xff0c;结果发现这本书自己用了一个库来实现书上的代码&#xff0c;于是我去下载这个库以及测试数据的文件。但是过程意外的艰辛&a…

算法第四版课后习题答案 西安电子科技大学 计算机学院 算法课

来源于西电计算机15级学长学姐&#xff0c;算法第四版课后习题答案 西安电子科技大学 计算机学院 算法课。 再推荐一个好的看答案的地方&#xff0c;每一题都有&#xff0c;只是还没有更新完成。 地址&#xff1a;https://alg4.ikesnowy.com 顺便说一句&#xff0c;16级算法…