数据库连接池 一时失言乱红尘 2022-05-16 00:16 374阅读 0赞 **连接池:**把连接放在一个池里,它里面有很多连接 会给你空闲的连接使用,Java从数据源里面的得到连接 (线程池把连接放进去,会有连接的标志--占用/空闲 你去拿时-- 给你/等待) 需要一个类来获取数据源 **数据源:**即DataSource的实现,数据源中实现了数据库连接池的实现; 使用数据库连接池后,不再需要数据库连接的代码,直接从数据源获得数据库的连接。 **开源数据库连接池**:DBCP ,C3PO ,JNDI(tomcat里面配置数据源)----面向接口的编程 DBCP:配置信息放在**dbcpconfig.properties**文件 ; C3PO:加载applicationContext.xml配置文件中的信息 NDI(tomcat里面配置数据源) Druid: 阿里巴巴 **连接池都有两种方法可以去实现:即纯Java的方式和spring依赖注解的方式:** ### **1.DBCP** ### **纯Java 方式: 工厂类去读配置文件给 basicDatasource(创建数据源) 并返回数据源** 有获取数据源的类 将数据传进去 就可以创建实例 **<1>.导入需要的jar包放到pom.xml中** ![70][] **<2>.在类目录下创建dbcpconfig.properties:存放数据库信息** ![70 1][] **<3>.代码实现配置信息获取,返回数据源DataSource(获得数据库连接)** /* 1.传入连接池的配置文件(DataSouece接口要求) 2.创建配置文件对象 3.Basic(工厂类 ) 读取配置文件 返回一个DataSouece(里面有连接数) 4.打开这两个类的源码可以i看到它里面的配置 */ public DataSource getDataSourceByDBCP() throws Exception { InputStream url=JdbcUtil.class.getResource("/dbcpconfig.properties").openStream(); Properties properties=new Properties(); properties.load(url); //有获取数据源的类 将数据传进去 就可以创建实例 DataSource datasource=BasicDataSourceFactory.createDataSource(properties); return datasource; } **spring注入方式:把BasicDatasource datasource2; 注入到JdbcUtil** **<1>.在applicationContext.xml中配置bean** ![70 2][] **<2>.将配置好的bean 注入到jdbcUtil类中(spring依赖注入原理)** ![70 3][] ### **2.c3p0:** ### **C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定**; <1>.导入jar包 c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作Oracle数据库,还需导入c3p0-oracle-thin-extras-0.9.2-pre1.jar ![70 4][] <2>.在类目录下加入C3P0的配置文件:c3p0-config.xml <c3p0-config> 15 <!-- 16 C3P0的缺省(默认)配置, 17 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源 18 --> 19 <default-config> 20 <property name="driverClass">com.mysql.jdbc.Driver</property> 21 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property> 22 <property name="user">root</property> 23 <property name="password">XDP</property> 24 25 <property name="acquireIncrement">5</property> 26 <property name="initialPoolSize">10</property> 27 <property name="minPoolSize">5</property> 28 <property name="maxPoolSize">20</property> 29 </default-config> 30 31 <!-- 32 C3P0的命名配置, 33 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源 34 --> 35 <named-config name="MySQL"> 36 <property name="driverClass">com.mysql.jdbc.Driver</property> 37 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property> 38 <property name="user">root</property> 39 <property name="password">XDP</property> 40 41 <property name="acquireIncrement">5</property> 42 <property name="initialPoolSize">10</property> 43 <property name="minPoolSize">5</property> 44 <property name="maxPoolSize">20</property> 45 </named-config> 46 47</c3p0-config> <3>.数据库连接池连接 ![70 5][] ![70 6][] **\*\*c3p0与dbcp区别:** \-- dbcp没有自动回收空闲连接的功能 \---c3p0有自动回收空闲连接功能 ### **3.配置Tomcat数据源 JNDI** ### 它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需 通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。 Tomcat服务器创建的数据源是以JNDI资源的形式发布的,所以说在**Tomat服务器中配置一个数据源实际上就是在配置一个JNDI资源****.** 如下配置tomcat服务器的数据源: ![70 7][] Tomcat服务器创建好数据源之后是以JNDI的形式绑定到一个JNDI容器中的,我们可以把JNDI想象成一个大大的容器,我们可以往这个容器中存放一些对象,一些资源,JNDI容器中存放的对象和资源都会有一个独一无二的名称,应用程序想从JNDI容器中获取资源时,只需要告诉JNDI容器要获取的资源的名称,JNDI根据名称去找到对应的资源后返回给应用程序 开发中,服务器会为我们的应用程序创建很多资源,比如request对象,response对象,服务器创建的这些资源有两种方式提供给我们的应用程序使用: 第一种是通过方法参数的形式传递进来,比如我们在Servlet中写的doPost和doGet方法中使用到的request对象和response对象就是服务器以参数的形式传递给我们的。 第二种就是JNDI的方式,服务器把创建好的资源绑定到JNDI容器中去,应用程序想要使用资源时,就直接从JNDI容器中获取相应的资源即可。 ![70 8][] 配置tomcat数据源 <1>.WEB-INF下创建context.xml <2>.context.xml中配置tomcat服务器的数据源信息 <3>.将数据库的驱动jar文件需放置在tomcat的lib下 ![70 9][] <4>.在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源 ### **4. Druid: 阿里巴巴** ### 跟以上几种都差不多,只是实现了不同的类. ![70 10][] **ps:所有开源的连接池都有这两种使用的方法,通过连接数据源获取数据库连接;省了建立数据库连接的代码!** [70]: /images/20220516/87274d66e3684812aa568f5809fd01da.png [70 1]: /images/20220516/86c019b875f341dc8e5973abb9afa788.png [70 2]: /images/20220516/08e513b8c45746009e43cb850cc469d8.png [70 3]: /images/20220516/fe4d891179d640b4ae93c42c706d56ca.png [70 4]: /images/20220516/290c513fbb954c96a7da7b58775ea7b2.png [70 5]: /images/20220516/94095096820c469f8757155c078205f8.png [70 6]: /images/20220516/62c811dbc0b743a58d67e53a2ac3b86a.png [70 7]: /images/20220516/24ae36e78a354ff1aa456deb86c30e2f.png [70 8]: /images/20220516/23978621dfdd4961b3df9add94f27efe.png [70 9]: /images/20220516/fd2426c0f4f04065b20262f606c56c59.png [70 10]: /images/20220516/97659d4095a9469c8d66f39fd7abe399.png
相关 数据库-----数据库连接池 @百度百科 ![Center][] [Center]: /images/20220721/39979dcdad014fb6a1579254a5398d26.png 古城微笑少年丶/ 2022年09月21日 11:56/ 0 赞/ 315 阅读
相关 数据库连接池 连接池原理 连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立 水深无声/ 2022年08月02日 09:37/ 0 赞/ 59 阅读
相关 数据库连接池 author:skate time:2010-10-13 -------------------- 数据库连接池的工作原理 连接池就是连接数据库对象的缓冲存 柔情只为你懂/ 2022年07月14日 16:46/ 0 赞/ 48 阅读
相关 数据库连接池 数据库连接池 1.概述 > 数据库连接池就是存放数据库连接(Connection)的集合 > 我们获取一个数据库连接是一个相对很麻烦的过程,如果我们获取一个数据 电玩女神/ 2022年06月09日 05:28/ 0 赞/ 337 阅读
相关 数据库连接池 连接池:把连接放在一个池里,它里面有很多连接 会给你空闲的连接使用,Java从数据源里面的得到连接 (线程池把连接放进去,会有连接的标志--占用/空闲 你去拿时-- 给你/等 一时失言乱红尘/ 2022年05月16日 00:16/ 0 赞/ 375 阅读
相关 数据库连接池 public class java_数据库连接池 { //1.定义变量 //管理数据连接池对象 private ComboPool 妖狐艹你老母/ 2022年05月11日 14:24/ 0 赞/ 247 阅读
相关 数据库连接池 连接池直接使用别人提供的就可以,需要做的就是导入jar包和配置文件的使用按照他们的规范 jar包有 (fastjson.jar包可以不要,这个是使用json和前端进行数据交 快来打我*/ 2022年05月04日 03:27/ 0 赞/ 369 阅读
相关 数据库连接池 要是考虑到JDBC连接中用到Connection 在每次对数据进行增删查改都要开启、关闭,在实例开发项目中,浪费了很大的资源。因此采用连接池技术。 //数据库连接 pub 秒速五厘米/ 2022年02月14日 00:27/ 0 赞/ 414 阅读
相关 数据库连接池 今日知识 1. c3p0和Druid使用 2. DBUtils使用 3. SpringJDBC轻量级框架 4. 总结 c3p0和Dru 小鱼儿/ 2021年11月29日 10:36/ 0 赞/ 493 阅读
相关 数据库连接池 传统的jdbc连接数据库方式如下: 我们需要几个步骤:注册 JDBC 驱动程序注册( Class.forName(DRIVER\_NAME) ),通过DriverManag 爱被打了一巴掌/ 2021年09月10日 05:40/ 0 赞/ 611 阅读
还没有评论,来说两句吧...