数据源与连接池的关系

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 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,如需转载请自行联系原作者




相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Java 数据安全/隐私保护 数据格式
Spring Cloud Gateway 网关整合 Knife4j 4.3 实现微服务接口文档聚合
Spring Cloud Gateway 网关整合 Knife4j 4.3 实现微服务接口文档聚合
|
Java Maven
程序包org.springframework.transaction.annotation不存在
整合ssm报:程序包org.springframework.transaction.annotation不存在 使用注解: @Transactional 之后,就一直报不存在 最终找到原因是:maven依赖 spring-tx版本问题,换个版本就OK
1836 0
程序包org.springframework.transaction.annotation不存在
|
9月前
|
数据库 C++
【数据结构进阶】红黑树超详解 + 实现(附源码)
本文深入探讨了红黑树的实现原理与特性。红黑树是一种自平衡二叉搜索树,通过节点着色(红/黑)和特定规则,确保树的高度接近平衡,从而实现高效的插入、删除和查找操作。相比AVL树,红黑树允许一定程度的不平衡,减少了旋转调整次数,提升了动态操作性能。文章详细解析了红黑树的性质、插入时的平衡调整(变色与旋转)、查找逻辑以及合法性检查,并提供了完整的C++代码实现。红黑树在操作系统和数据库中广泛应用,其设计兼顾效率与复杂性的平衡。
1695 3
|
监控 Java Nacos
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(上)
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程
578 0
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(上)
|
Shell Docker 容器
使用exec模式与shell模式,执行ENTRYPOINT和CMD的区别
结合 `exec`与 `shell`模式,`ENTRYPOINT`与 `CMD`在Docker容器启动时的交互方式展现出不同的特点。选择哪种模式,取决于对执行环境的纯净度、性能需求以及是否需要利用shell特性。理解这些细微差别,有助于更精细地控制容器的行为,优化应用部署与管理流程。
342 0
|
Java
Springboot配置静态资源
Springboot配置静态资源
511 1
|
移动开发 HTML5
解决VScode 使用 ! +Tab键无法无法生成HTML模板的问题
解决VScode 使用 ! +Tab键无法无法生成HTML模板的问题
|
算法 安全 网络安全
一篇文章读懂HTTPS TLS 1.2握手流程(下)
一篇文章读懂HTTPS TLS 1.2握手流程
11626 2
|
存储 缓存 Java
【jvm系列-08】精通String字符串底层原理和运行机制(详解)
【jvm系列-08】精通String字符串底层原理和运行机制(详解)
782 0
|
消息中间件 存储 前端开发
28个案例问题分析---16---消息队列的作用和意义--RabbitMq
28个案例问题分析---16---消息队列的作用和意义--RabbitMq
310 0

热门文章

最新文章