数据源与连接池的关系

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

   今日一直在纠结数据源连接池,这两个东西到底是什么关系呢?因为看spring中配置的明明是连接池,但是术语却叫其 数据源,而且也没有看到其配置数据源,想想肯定是有原因的,遂来总结下。

   先抛开spring的配置,先来谈谈市场上常用的数据源和连接池:

    数据源:JDBC数据源,JNDI数据源,ODBC数据源等(黑体比较常用);

    连接池:C3P0连接池,DBCP连接池,Porxool连接池(黑体比较常用)


   那么到底他们之间是什么关系呢?

   数据源是指数据的来源,比如数据库。
   连接池是指这样一个“池子”,池子中的每个东西都是连接数据源的一个“连接”,这样别人想连接数据源的时候可以从这      个“池子”里取,用完以后再放回来供以后其他想使用的人使用。


 在与数据库打交道的过程中,每次操作数据库都需要创建connection连接,势必是很浪费资源的。所以解决办法是建立连接池,初始化时往连接池中放入一定数量的连接,需要时从池中取出连接,使用完毕后将连接放回池子。

所以,连接池不是必须的,只是提高效率用的。

  1.使用JDBC数据源(没有连接池)

    

1
2
3
Class.forName( "com.mysql.jdbc.Driver" );
String url= "jdbc:mysql://localhost:3306/test" ;
Connection connection =  DriverManager.getConnection(url, "root"  , "123" );

 所以上面可以看到,不使用连接池,只需要上述几行代码,就可以得到connection ,但是记住,这样子是很浪费资源的。


2.使用JNDI数据源

  JNDI数据源的使用,一定是要放在web项目里面的(不考虑spring的配置),也就是要经过服务器的配置,这点让我摸索了很久。

  既然要经过服务器的话,那么我是tomcat,在conf中context.xml中加入如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  <Resource name= "mydataSource"  auth= "Container"  type= "javax.sql.DataSource"
                    url= "jdbc:mysql://localhost:3306/test"
                 driverClassName= "com.mysql.jdbc.Driver"
                 password= "123"
                 username= "root"
                 initialSize= "2"
                 maxActive= "3"
                 maxIdle= "1"
                 minIdle= "1"
                 maxWait= "10000"
                 removeAbandoned= "true"
                 logAbandoned= "true"
                 removeAbandonedTimeout= "60"
                 timeBetweenEvictionRunsMillis= "900000"
                 minEvictableIdleTimeMillis= "1800000"
                 numTestsPerEvictionRun= "100"
                 validationQuery= "select count(0) from dual"
                 poolPreparedStatements= "true"
                 maxOpenPreparedStatements= "100" />

 对上面配置相关解释

数据库相关username,password,driverClassName,url

 jndi相关name,type,factory

tomcat也允许采用其他连接实现,不过默认使用dbcp连接池,即factory默认为org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

连接数控制与连接归还策略:maxActive,maxIdle,minIdle,maxWait

应对网络不稳定的策略:testOnBorrow,validationQuery

应对连接泄漏的策略:removeAbandoned,removeAbandonedTimeout,logAbandoned


网上很多资料说:使用JNDI数据源时,还需要在tomcat的server.xml和项目的web.xml中加入其它的东东,具体加入什么网上都可以百度到,但是实践证明是不需要的。

下面的代码调用JNDI数据源:

1
2
3
  Context it =  new   InitialContext();
  DataSource ds = (DataSource) it.lookup( "java:comp/env/mydataSource" );
  Connection conn = ds.getConnection();

注意:lookup方法中的内容  java:comp/env/为固定写法,后面跟具体的dataSource名称


下一篇文章中,将会仔细讲讲spring怎样配置数据源(连接池)



 

     本文转自布拉君君 51CTO博客,原文链接:http://blog.51cto.com/5148737/1430384,如需转载请自行联系原作者




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 数据库连接 应用服务中间件
原生JDBC使用C3p0数据源和dbcp数据源
原生JDBC使用C3p0数据源和dbcp数据源
113 0
|
24天前
|
XML Java 数据库连接
如何使用HikariCP连接池来优化数据库连接管理
在Java应用中,高效管理数据库连接是提升性能的关键。本文介绍了如何使用HikariCP连接池来优化数据库连接管理。通过引入依赖、配置参数和获取连接,你可以显著提高系统的响应速度和吞吐量。 示例代码展示了从配置到使用的完整流程,帮助你轻松上手。
85 3
|
24天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
39 1
|
Java 数据库连接 测试技术
如何使用mybatis处理数据库关系中的多对一关系呢?
如何使用mybatis处理数据库关系中的多对一关系呢?
|
Java 数据库连接 测试技术
如何使用mybatis处理数据库关系中的一对多关系呢?
如何使用mybatis处理数据库关系中的一对多关系呢?
|
网络协议 测试技术 Apache
Tablestore-OTSClient连接池连接无法复用分析
某应用在压测过程中,发现OTSClient与OTS服务端之间的TCP连接有大量处于TIME_WAIT状态。
171 0
|
SQL Java 关系型数据库
JDBC概念及获取数据库连接的5种方式
JDBC概念及获取数据库连接的5种方式
93 0
|
Java 数据库连接 API
自定义数据库连接池
自定义数据库连接池
111 0
自定义数据库连接池
|
SQL 存储 缓存
JDBC第三天~JDBC之事务、批处理、自动生成主键、连接池、重构设计
JDBC第三天~JDBC之事务、批处理、自动生成主键、连接池、重构设计
248 0
JDBC第三天~JDBC之事务、批处理、自动生成主键、连接池、重构设计
|
存储 缓存 监控
基于HiKariCP组件,分析连接池原理
HiKariCP作为SpringBoot2框架的默认连接池,号称是跑的最快的连接池,数据库连接池与之前两篇提到的线程池和对象池,从设计的原理上都是基于池化思想,只是在实现方式上有各自的特点;
367 0
基于HiKariCP组件,分析连接池原理