数据源与连接池的关系

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:

   今日一直在纠结数据源连接池,这两个东西到底是什么关系呢?因为看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,如需转载请自行联系原作者




相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
安全 数据安全/隐私保护
【接口加密】理解接口加密的基础概念
【接口加密】理解接口加密的基础概念
|
OLAP OLTP OceanBase
构建基于 OceanBase 的混合事务与分析处理(HTAP)系统
【8月更文第31天】 随着业务复杂性的增加,企业需要同时处理大量的在线事务处理(OLTP)和在线分析处理(OLAP)。传统的做法是维护两个独立的系统,分别用于事务处理和数据分析。然而,这种分离的方式不仅增加了运维的复杂度,还可能导致数据不一致的问题。为了解决这些问题,混合事务与分析处理(Hybrid Transactional/Analytical Processing, HTAP)的概念应运而生。OceanBase 作为一款支持 HTAP 的分布式数据库系统,能够同时满足事务处理和分析查询的需求。本文将介绍如何利用 OceanBase 构建 HTAP 系统。
397 1
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
2004 10
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
436 3
|
设计模式 Java
Java“不能转换的类型”解决
在Java编程中,“不能转换的类型”错误通常出现在尝试将一个对象强制转换为不兼容的类型时。解决此问题的方法包括确保类型间存在继承关系、使用泛型或适当的设计模式来避免不安全的类型转换。
1730 7
|
缓存 监控 前端开发
java简历2年经验编写教程+面试题
是花了我很多天的心思,用心打造出来的Java简历分析模板,适合新手包装成有一点工作年限(1-2年),但又不会太老手的简历;让你的简历做得跟别人不一样;
4793 0
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
6828 2
|
Java
Springboot配置静态资源
Springboot配置静态资源
675 1
|
移动开发 HTML5
解决VScode 使用 ! +Tab键无法无法生成HTML模板的问题
解决VScode 使用 ! +Tab键无法无法生成HTML模板的问题
|
算法 安全 网络安全
一篇文章读懂HTTPS TLS 1.2握手流程(下)
一篇文章读懂HTTPS TLS 1.2握手流程
11846 2