数据源与连接池的关系

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

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

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

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

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

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

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

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

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

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中加入如下:

 <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数据源:

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

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

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

数据源与连接池的关系

时间: 2024-12-05 06:49:14

数据源与连接池的关系的相关文章

Spring Boot的数据源与连接池

? Create by [email protected] 2018-8-2 一:依赖 使用Spring Boot的默认数据源spring.datasource只需要导入如下依赖: <dependency> <groupId>org.springframework.boot</groupId> ??????????? <artifactId>spring‐boot‐starter‐jdbc</artifactId> ??????????? <

JDBC高级应用 - 数据源(连接池)

数据源(连接池) (1)我们之前使用JDBC进行数据库访问时,首先是获得一个JDBC连接,执行增删改查操作后,关闭数据库连接. (2)但是我们使用的resultset.statement.conncetion在创建和关闭时都需要耗费较多时间,而且占用资源.特别是在企业级应用中,一般是很多人同时访问,如果每个人访问都给他们建立一个新的连接,并在使用完后又关闭,如果一个连接的建立和关闭以0.1秒计算,则1000个人就是100秒,如果是要承载上千万人同时访问的sina网站呢. 因此JDBC可以应对小型

eclipse下jdbc数据源与连接池的配置及功能简介

今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急剧下降,那么怎么解决这个问题呢? 我所学到的方法就是通过JDBC数据源和连接池的方式来解决这个问题.利用DataSource来建立数据库的连接不需要加载JDBC驱动,也不需要DriverManager类,通过向一个JNDI服务器查询来得到DataSource对象,然后调用DataSource对象的g

《深入理解mybatis原理》 Mybatis数据源与连接池

对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 以下是本章的组织结构: 一.MyBatis数据源DataSource分类 二.数据源DataSour

《深入理解mybatis原理3》 Mybatis数据源与连接池

<深入理解mybatis原理> Mybatis数据源与连接池 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 以下是本章的组织结构: 一.MyBa

数据源,连接池,连接,jndi

连接池:连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象.连接池自动分配连接对象并对闲置的连接进行回收.连接池中的连接对象是由数据源(DataSource)创建的.连接池(Connection Pool)用来管理连接(Connection)对象. 数据源:数据源(DataSource)用来连接数据库,创建连接(Connection)对象. java.sql.DataSource接口负责建立与数据库的连接 由Tomcat提供,将连接保存在连接池中. JNDI(Java Naming

Spring整合Hibernate_数据源Datasource_dbcp连接池

1,  Spring指定 datasource DataSource接口,在javax.sql包,里边有一个getConnection()方法.提供了标准化的取得连接的方式.只要实现了这个接口.Sun这个土鳖定的. a)         参考文档,找dbcp.BasicDataSource  (dbcp:database connection pool数据库连接池) i.  c3p0 ii.     dbcp iii.    proxool b)        在DAO或者Service中注入d

mybatis深入理解(二)-----Mybatis数据源与连接池

对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池.本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 一.MyBatis数据源DataSource分类 MyBatis数据源实现是在以下四个包中: MyBa

数据源(连接池)

数据源一般实现自javax.sql.DataSource接口,Spring.Struts.Hibernate等框架都有自己的数据源,Tomcat中也内置了数据源支持,Tomcat使用Jakarta-CommonsDatabase Connection Pool作为数据源的实现,使用时只需按照Tomcat文档配置即可 数据源可以配置在server.xml中,也可以配置在context.xml中 在context.xml中配置数据源 <Context cookies="true"&g