个人博客:https://suveng.github.io/blog/​​​​​​​

Spring 整合C3P0连接池

注意:环境 jdk1.8 ,idea 2018,maven,spring环境

代码存放在码云里面。

码云地址

https://gitee.com/suwenguang

注意这个工程还有我其他demo,本文目录在spring.my.suveng.jdbc.c3p0JDBC 目录里面

spring 配置再spring.config 目录下

什么是连接池?

连接池允许多个客户端使用缓存起来的链接对象,这些对象是共享的,可重用的。

为什么要连接池?

打开/关闭数据库连接开销很大,连接池技术允许我们在连接池里维护连接对象,这样可以提高数据库的执行命令的性能

连接池运行原理

多个客户端请求可以重复使用相同的连接对象,当每次收到一个客户端请求时,就会搜索连接池,看看有没有闲置的连接对象。如果没有闲置对象的话,要么所有的客户端请求都进入队列排队,要么在池中创建一个新的连接对象(这取决于池里已经有多少个连接存在以及配置支持多少连接)。一旦某个请求使用完连接对象之后,这个对象会被重新放入池中,然后会被重新分派给排队等待的请求(分派给哪个请求要看使用什么调度算法) 。

因为大部分请求都是使用现存的连接对象,所以连接池技术大大减少了等待创建数据库连接的时间,从而减少了平均连接时间

spring整合c3p0连接池

  1. 导入jar包:c3p0 (使用maven导入依赖,只是部分pom.xml)

     <!--c3p0 连接池--><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>RELEASE</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>mchange-commons-java</artifactId><version>0.2.11</version></dependency><!--end-->
    
  2. 配置c3p0数据源。(这里并没有整合 mybatis的框架,使用的是spring JDBC)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/aop/spring-tx.xsd"><context:component-scan base-package="spring.my.suveng"/><!--使用注解配置aop 需要开启 切面自动代理--><aop:aspectj-autoproxy/><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/suveng?serverTimezone=Asia/Shanghai &amp;characterEncoding=utf8"/><property name="user" value="root"/><property name="password" value="root"/></bean><!--配置jdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

测试

/*** author Veng Su* email suveng@163.com* date 2018/8/16 18:56*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/my/suveng/jdbc/c3p0JDBC/spring_config/spring_c3p0.xml")
public class C3p0Test {@ResourceJdbcTemplate jdbcTemplate;@Testpublic void testC3p0() {// 查询一条数据User user1 = jdbcTemplate.queryForObject("select * from user where id = ?", new C3p0Test.BeanMapper(), 1);System.out.println(user1);// 删除
//         jdbcTemplate.update("delete from user where id = ?", 1);// 修改jdbcTemplate.update("update user set name = ? where id = ?", "春花", 1);// 插入jdbcTemplate.update("insert into user(name,age) values( ?, ?)", "花花", 1000);// 方式2:查询所有的数据List<User> list2 = jdbcTemplate.query("select * from user", new C3p0Test.BeanMapper());for (User user : list2) {System.out.println(user);}// 方式1: 查询所有的数据List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from user");for (Map<String, Object> map : list) {//  map.keySet() 用于获取所有的 keyfor (String key : map.keySet()) {// 通过 key 获取到对应的 value 值System.out.print(map.get(key));}// 相当于换行效果System.out.println();}}private class BeanMapper implements org.springframework.jdbc.core.RowMapper<User> {// 查询的时候,有可能会返回多个数据,所有的数据都会放在 rs 结果集中// rounum 代表的是记录的下表值public User mapRow(ResultSet resultSet, int i) throws SQLException {User user=new User();user.setId(resultSet.getInt("id"));user.setName(resultSet.getString("name"));user.setAge(resultSet.getInt("age"));return user;}}}

运行结果

使用spring JDBC 进行操作。数据源配置其实是很简单的。到这里配置完成,连接池还有其他配置可以选择。加油。

spring 整合c3p0连接池相关推荐

  1. Spring+Hibernate+c3p0连接池配置-连接无法释放的问题解决方案

     1.Spring+Hibernate+c3p0连接池配置: <?xml version="1.0" encoding="UTF-8"?> < ...

  2. spring配置c3p0连接池、spring的声明式事务管理

    一.spring配置c3p0连接池: 1.导入maven依赖: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> & ...

  3. MyBatis进阶七:MyBatis整合C3P0连接池;

    Mybatis整合其他连接池,本篇博客以整合C3P0连接池为例. 目录 MyBatis整合C3P0连接池的步骤: (1)第一步:通过maven引入C3P0的依赖: (2)第二步:创建C3P0和Myba ...

  4. MyBatis复习(九):MyBatis整合C3P0连接池

    为什么引入连接池 首先我们要明白," 建立数据库连接 " 是相当消耗资源和时间的,同时,建立数据库连接的数量也是有限的(所以在初学时,才强烈要求操作完后,一定要记得关闭数据库连接, ...

  5. 解决spring配置c3p0连接池,tomcat无法正常启动

    为什么80%的码农都做不了架构师?>>>    今天下午收到一名网友的在线求助.先简要描述一下问题的背景: Windows平台,tomcat应用服务器, Oracle数据库,应用架构 ...

  6. 【转】SSH中 整合spring和proxool 连接池

    [摘要:比来做的一个项目中应用到了毗邻池技巧,大概我们人人比拟认识的开源毗邻池有dbcp,c3p0,proxool.对那三种毗邻池来讲,从机能战失足率来讲,proxool轻微比前两种好些.本日我首要简 ...

  7. Spring c3p0连接池配置以及出错原因

    用的jar包 com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar 配置: 注意:如果出错原因(1)很有可能c3p0-config.xml中的配置文件出现问 ...

  8. c3p0连接池配置Spring核心配置文件中配置applicationContext.xml

    1.1 配置c3p0.properties属性文件 #c3p0连接池属性文件 # 四大基本信息 c3p0.driverClass=com.mysql.jdbc.Driver #这里需要改成你自己的数据 ...

  9. SpringBoot整合Druid连接池

    SpringBoot整合Druid连接池 前言 第一种整合方式 自定义的方式 引入Druid依赖 配置文件 配置类 实现监控功能 开启SQL防火墙 实现web应用 访问Druid页面需登录 第二种整合 ...

最新文章

  1. 如虎添翼|高德地图+Serverless 护航你的假日出行
  2. v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料
  3. Js实现类似PHP中的in_array方法
  4. HDU 1978 How many ways DP问题
  5. C语言程序设计线上测试01,2001年C语言程序设计笔试A卷.doc
  6. Java set的区别_java中List 和 Set 的区别
  7. Oracle中开启并行和相关查询
  8. abb外部轴零位校准_【ABB】ABB机器人外部轴参数(KpKvTi)调试
  9. Unity 模拟鼠标点击
  10. 贴片钽电容的封装、尺寸和标…
  11. 金仓数据库KingbaseES与Oracle大对象类型之间的区别
  12. big code: Toward Deep Learning Software Repositories [MSR 2015]
  13. Java 语言使用 Observer/Observable 实现简单的观察者模式
  14. Windows10添加自定义右键菜单(详细步骤)
  15. 无线路由器wan口和lan口
  16. 【讨论】品质因数,-从二阶传递函数分析自然谐振频率的含义。
  17. 开学一个月的心得体会
  18. macbook关于https 证书.p12文件转出私钥,公钥,crt文件,cre文件
  19. BIM族库下载——项目监控设备族库
  20. javascript调试工具:Blackbird

热门文章

  1. 美丽联合集团赵成:要让员工看到自己的未来
  2. 贝叶斯统计 韦来生 课后题答案 第二章
  3. 数据据结构实验——顺序表实验
  4. uboot boot ags
  5. OpenCV~图像处理API(逆光、模糊、亮度、雾霾)
  6. #五、江恩的共振点是什么?
  7. 表单验证与自定义表单验证
  8. C++ 取整,四舍五入
  9. JavaScript中一个等号、二个等号、 三个等号 的区别
  10. 宁选“范跑跑”,不要“郭跳跳”