Spring框架中获取连接池的几种方式
什么是数据库连接池?
数据库连接池是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池就是用来解决这些问题而提出的。
数据库连接池负责分配、管理和释放数据库连接。实际应用中,频繁的连接和关闭数据库,将会产生极大的消耗,影响应用的性能,造成不必要的资源浪费。连接池会预先创建一部分数据库连接以便使用,同时允许应用程序重复使用一个现有的数据库连接。数据库连接池创建的时候设置连接池最小和最大连接数,最小连接数即为,不管该连接是否被使用,都会预先创建。如果连接使用超出最小连接数,会在创建一个数据库连接。最大连接数为该连接池能承载的最大连接数量,如果超出这个数,后面的数据库连接请求将会进入等待队列。超出最小连接数而创建的连接使用结束后,不会被立马释放,而是会被放在连接池中等待被重复使用,或者等超出空闲时间后被释放。
连接方式:
1.DBCP数据源:
(数据源:连接数据库所需的类和参数)
DBCP配置Mysql数据源(通常是写在mybatis的配置文件中):
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!--initialSize: 初始化连接-->
<property name="initialSize" value="5"/>
<!--maxIdle: 最大空闲连接-->
<property name="maxIdle" value="10"/>
<!--minIdle: 最小空闲连接-->
<property name="minIdle" value="5"/>
<!--maxActive: 最大连接数量-->
<property name="maxActive" value="15"/>
<!--removeAbandoned: 是否自动回收超时连接-->
<property name="removeAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<property name="removeAbandonedTimeout" value="180"/>
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->
<property name="maxWait" value="3000"/>
<!-- 在空闲连接回收器执行周期(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="10000"/>
<!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
<property name="numTestsPerEvictionRun" value="10"/>
<!-- 最小空闲时间-->
<property name="minEvictableIdleTimeMillis" value="10000"/>
<!-- 验证链接是否有效的sql语句 -->
<property name="validationQuery" value="select 1" />
<!-- 获取链接之前是否测试链接的可用性 -->
<property name="testOnBorrow" value="true"/>
</bean>
2.C3P0数据源:
C3P0是一个开源的JDBC数据源实现项目,依赖包:c3p0-0.9.0.4.jar,xml中配置方式与DBCP类似,此处不再赘述。
3.Spring的数据源实现类 DriverManagerDataSource:
这是Spring本身提供的一个简单的数据源实现类,它位于org.springframework.jdbc.datasource接口中。该类实现接口javax.sql.DataSource接口,但是它并没有提供池化的连接机制,每次调用getConnection()获取新连接时,只是简单的创建一个新的连接。因此这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要添加额外的依赖类。
<bean id="driverManagerDateSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///dstest" />
<property name="username" value="root" />
<property name="password" value="root"></property>
</bean>
<!-- 获取该对象调用execute方法,可以执行sql语句 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="driverManagerDateSource"></property>
</bean>
4.获取JNDI数据源:
如果应用部署在高性能的应用服务器上(eg:weblogic、websohere等),我们希望使用应用服务器本身提供的数据源。应用服务器使用JNDI开放调用者使用,Spring专门为此提供引用JNDI资源的JndiObjectFactoryBean类。
写在最后:本人的第一篇技术博客,留个纪念^_^,如有问题之处,还望多多指正~~感谢大家支持~ 希望以后一起学习,一起进步!
Spring框架中获取连接池的几种方式的更多相关文章
- 在Spring框架中获取连接池的四种方式
1:DBCP数据源 DBCP类包位于 <SPRING_HOME>/lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons ...
- Spring框架中获取连接池常用的四种方式
1:DBCP数据源 DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所 ...
- strus2中获取表单数据 两种方式 属性驱动 和模型驱动
strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...
- Spring管理连接池的几种方式
第一种方式:.Spring常规的数据库连接方法: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations=&qu ...
- 配置Java连接池的两种方式:tomcat方式以及spring方式
1. tomcat方式:在context.xml配置连接池,然后在web.xml中写配置代码(也能够在server.xml文件里配置连接池).这两种方法的差别是:在tomcat6版本号及以上中cont ...
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
- JDBC 连接池的两种方式——dbcp & c3p0
申明:本文对于连接资源关闭采用自定义的 JDBCUtils 工具: package com.test.utils; import java.sql.Connection; import java.sq ...
- Struts2中获取servlet API的几种方式
struts2是一个全新的MVC框架,如今被广大的企业和开发者所使用,它的功能非常强大.这给我们在使用servlet 纯java代码写项目的时候带来了福音.但是一般来说,我们的项目不到一定规模并不需要 ...
- 在SpringMVC中获取request对象的几种方式
1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...
随机推荐
- python 常用turtle
python 常用turtle 常用命令1 import turtle turtle.bgcolor("black") 设置背景颜色 turtle.onscreenclick(x, ...
- 2017.11.27 变量进阶与LED矩阵
局部变量:函数内部声明的变量,只在函数内部有效. 全部变量:在函数外部声明的变量,全局都有效,直到程序执行完毕. 全局变量负作用: 1.降低函数的独立性 2.降低函数的通用性,不利于函数的重复调用. ...
- Java并发包1--线程的状态及常用方法
一.线程主要有以下几种状态: new(新建):线程刚刚被创建 runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态 blocked(阻 ...
- 关于linux系统CPU篇--->不容易发现的占用CPU较高进程
1.系统的CPU使用率,不仅包括进程用户态和内核态的运行,还包括中断处理,等待IO以及内核线程等等.所以,当你发现系统的CPU使用率很高的时候,不一定能找到相对应的高CPU使用率的进程 2.案例分析, ...
- java面向对象总结(一)
1. 对象的概念及面向对象的三个基本特征 面向对象的三大核心特性 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率.面向对象程序设计有以下优点. ...
- vue的三种通信方式
一 确定组件关系二 使用第一步确定的组件关系在下面找到使用方法 1 父子通信(子组件使用父组件数据渲染) a) 在 子组件 中添加props props: [自定义prop名字] b) 在子组件中把自 ...
- 20190317 A
今天是学长wsy的题,我理论会100+50+30=180,实际100+20+10=130,充分体现我的菜 最近日常模拟赛挂分50到60,很危险,这2天一定要调整好... Upd:T2我认为50的划分数 ...
- Apache Maven 3.6.1配置安装
Apache Maven 3.6.1配置安装 一.下载 maven下载地址:http://maven.apache.org/download.cgi 二.安装 1,解压即可用 2,环境变量配置 MAV ...
- android源码编译出现No private recovery resources for TARGET_DEVICE解决方法
mmm或mm出现以下提示的解决方法:Terminal log:No private recovery resources for TARGET_DEVICE xxxxxxmake: Entering ...
- 2019 年 GrapeCity Documents 产品路线图
前言 | 问题背景 随着软件行业引入新的硬件和操作系统,我们看到更多的托管框架与.NET技术保持同步.Microsoft的.NET Standard和.NET Core定义了一个跨平台规范,为应用程序 ...