spring 整合c3p0连接池
个人博客: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连接池
导入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-->
配置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 &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连接池相关推荐
- Spring+Hibernate+c3p0连接池配置-连接无法释放的问题解决方案
1.Spring+Hibernate+c3p0连接池配置: <?xml version="1.0" encoding="UTF-8"?> < ...
- spring配置c3p0连接池、spring的声明式事务管理
一.spring配置c3p0连接池: 1.导入maven依赖: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> & ...
- MyBatis进阶七:MyBatis整合C3P0连接池;
Mybatis整合其他连接池,本篇博客以整合C3P0连接池为例. 目录 MyBatis整合C3P0连接池的步骤: (1)第一步:通过maven引入C3P0的依赖: (2)第二步:创建C3P0和Myba ...
- MyBatis复习(九):MyBatis整合C3P0连接池
为什么引入连接池 首先我们要明白," 建立数据库连接 " 是相当消耗资源和时间的,同时,建立数据库连接的数量也是有限的(所以在初学时,才强烈要求操作完后,一定要记得关闭数据库连接, ...
- 解决spring配置c3p0连接池,tomcat无法正常启动
为什么80%的码农都做不了架构师?>>> 今天下午收到一名网友的在线求助.先简要描述一下问题的背景: Windows平台,tomcat应用服务器, Oracle数据库,应用架构 ...
- 【转】SSH中 整合spring和proxool 连接池
[摘要:比来做的一个项目中应用到了毗邻池技巧,大概我们人人比拟认识的开源毗邻池有dbcp,c3p0,proxool.对那三种毗邻池来讲,从机能战失足率来讲,proxool轻微比前两种好些.本日我首要简 ...
- Spring c3p0连接池配置以及出错原因
用的jar包 com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar 配置: 注意:如果出错原因(1)很有可能c3p0-config.xml中的配置文件出现问 ...
- c3p0连接池配置Spring核心配置文件中配置applicationContext.xml
1.1 配置c3p0.properties属性文件 #c3p0连接池属性文件 # 四大基本信息 c3p0.driverClass=com.mysql.jdbc.Driver #这里需要改成你自己的数据 ...
- SpringBoot整合Druid连接池
SpringBoot整合Druid连接池 前言 第一种整合方式 自定义的方式 引入Druid依赖 配置文件 配置类 实现监控功能 开启SQL防火墙 实现web应用 访问Druid页面需登录 第二种整合 ...
最新文章
- 如虎添翼|高德地图+Serverless 护航你的假日出行
- v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料
- Js实现类似PHP中的in_array方法
- HDU 1978 How many ways DP问题
- C语言程序设计线上测试01,2001年C语言程序设计笔试A卷.doc
- Java set的区别_java中List 和 Set 的区别
- Oracle中开启并行和相关查询
- abb外部轴零位校准_【ABB】ABB机器人外部轴参数(KpKvTi)调试
- Unity 模拟鼠标点击
- 贴片钽电容的封装、尺寸和标…
- 金仓数据库KingbaseES与Oracle大对象类型之间的区别
- big code: Toward Deep Learning Software Repositories [MSR 2015]
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- Windows10添加自定义右键菜单(详细步骤)
- 无线路由器wan口和lan口
- 【讨论】品质因数,-从二阶传递函数分析自然谐振频率的含义。
- 开学一个月的心得体会
- macbook关于https 证书.p12文件转出私钥,公钥,crt文件,cre文件
- BIM族库下载——项目监控设备族库
- javascript调试工具:Blackbird