以下是一个小应用的数据库连接池配置,包括DBCP和C3P0的配制方法

因为是小应用,完全不涉及访问压力,所以配置上采取尽量节约数据库资源的方式

具体要求如下:
初始化连接数为0
连接不够,需要新创建时,每次创建1个
尽快回收空闲连接
需要开启prepareStatement缓存

具体用代码来说明

 package com.yazuo.util;

 import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate; import java.util.Map; /**
* Created by IntelliJ IDEA.
* User: Luo
* Date: 13-6-19
* Time: 下午3:33
*/
public class JdbcTemplateFactory {
static Logger log = LoggerFactory.getLogger(JdbcTemplateFactory.class); private static JdbcTemplate jdbcTemplate; /**
* 获取单例的jdbcTemplate,基于c3p0
*
* @return
*/
public static JdbcTemplate getJdbcTemplate() {
if (jdbcTemplate == null) {
synchronized (JdbcTemplateFactory.class) {
if (jdbcTemplate == null) {
try {
//读取配置文件
Map<String, String> jdbcProps = PropertiesUtil.getPropertiesMap("jdbc.properties");
//创建连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl(jdbcProps.get("jdbc.url"));
dataSource.setUser(jdbcProps.get("jdbc.username"));
dataSource.setPassword(jdbcProps.get("jdbc.password"));
//默认初始化连接为3,设置为0
dataSource.setInitialPoolSize(0);
//默认每次创建连接数为3,设置为1
dataSource.setAcquireIncrement(1);
//默认最小连接数是3,设置为0
dataSource.setMinPoolSize(0);
//默认最长空闲时间为0,即不会回收空闲连接,设置为10秒
dataSource.setMaxIdleTime(10);
//默认为不开启 prepareStatement 缓存,设置为最大缓存5个
dataSource.setMaxStatements(5);
jdbcTemplate = new JdbcTemplate(dataSource);
} catch (Exception e) {
throw new IllegalStateException("数据库连接创建失败", e);
}
}
}
}
return jdbcTemplate;
} /**
* 获取单例的jdbcTemplate,基于dbcp
*
* @return
*/
public static JdbcTemplate getJdbcTemplateByDbcp() {
if (jdbcTemplate == null) {
synchronized (JdbcTemplateFactory.class) {
if (jdbcTemplate == null) {
try {
//读取配置文件
Map<String, String> jdbcProps = PropertiesUtil.getPropertiesMap("jdbc.properties");
//创建连接池
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(jdbcProps.get("jdbc.url"));
dataSource.setUsername(jdbcProps.get("jdbc.username"));
dataSource.setPassword(jdbcProps.get("jdbc.password"));
dataSource.setInitialSize(3); //默认为不起动回收器,设置为30秒执行一次回收器
dataSource.setTimeBetweenEvictionRunsMillis(30 * 1000);
//默认为30分钟不使用的连接被认为空闲,设置为10秒钟
dataSource.setMinEvictableIdleTimeMillis(10 * 1000);
//开启 prepareStatement 缓存
dataSource.setPoolPreparedStatements(true);
jdbcTemplate = new JdbcTemplate(dataSource);
} catch (Exception e) {
throw new IllegalStateException("数据库连接创建失败", e);
}
}
}
}
return jdbcTemplate;
} }

最新文章

  1. python学习 第一天
  2. ueditor编辑器使用
  3. 信息安全系统设计基础实验一 20135211&amp;20135216
  4. InstallShield: Component-Feature Associations
  5. asp.net+Sqlserver 通过存储过程读取数据
  6. python学习之路-10 网络编程之进阶
  7. 【错排问题】【HDU2048】神、上帝以及老天爷
  8. Hibernate常用Annotation标签说明
  9. HDU 1008 u Calculate e
  10. 分布式存储ceph——(4)ceph 添加/删除osd
  11. xr报表调整
  12. 使用mongo获取文章
  13. Arduino内部网页代理,网页穿透,公网访问Arduino内部网页
  14. notepad++之删除空行
  15. svn离线安装以及配置,管理python自动化脚本
  16. codeforces589I
  17. thinkphp链接多个数据库时怎么调用M方法?
  18. &lt;项目需求规格说明书&gt; - 福大易宝
  19. javah命令的使用
  20. C#字符串比较方法

热门文章

  1. 【转】Eazfuscator.NET 3.3中混淆化需要注意的一些问题
  2. [转]WPF 依赖项属性
  3. 1017. Queueing at Bank (25)
  4. C/C++运算符优先级
  5. 在iOS App的图标上显示版本信息
  6. SQL索引优化
  7. Careercup - Facebook面试题 - 4892713614835712
  8. 解决在ubuntu下requests 无法找到模块packages
  9. Codeforces Bubble Cup 8 - Finals [Online Mirror] B. Bribes lca
  10. CSDN&mdash;&mdash;【低调的草原狼】&mdash;&mdash;Ext4.2学习目录整理