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

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

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

具体用代码来说明

  1. package com.yazuo.util;
  2.  
  3. import com.mchange.v2.c3p0.ComboPooledDataSource;
  4. import org.apache.commons.dbcp.BasicDataSource;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8.  
  9. import java.util.Map;
  10.  
  11. /**
  12. * Created by IntelliJ IDEA.
  13. * User: Luo
  14. * Date: 13-6-19
  15. * Time: 下午3:33
  16. */
  17. public class JdbcTemplateFactory {
  18. static Logger log = LoggerFactory.getLogger(JdbcTemplateFactory.class);
  19.  
  20. private static JdbcTemplate jdbcTemplate;
  21.  
  22. /**
  23. * 获取单例的jdbcTemplate,基于c3p0
  24. *
  25. * @return
  26. */
  27. public static JdbcTemplate getJdbcTemplate() {
  28. if (jdbcTemplate == null) {
  29. synchronized (JdbcTemplateFactory.class) {
  30. if (jdbcTemplate == null) {
  31. try {
  32. //读取配置文件
  33. Map<String, String> jdbcProps = PropertiesUtil.getPropertiesMap("jdbc.properties");
  34. //创建连接池
  35. ComboPooledDataSource dataSource = new ComboPooledDataSource();
  36. dataSource.setJdbcUrl(jdbcProps.get("jdbc.url"));
  37. dataSource.setUser(jdbcProps.get("jdbc.username"));
  38. dataSource.setPassword(jdbcProps.get("jdbc.password"));
  39. //默认初始化连接为3,设置为0
  40. dataSource.setInitialPoolSize(0);
  41. //默认每次创建连接数为3,设置为1
  42. dataSource.setAcquireIncrement(1);
  43. //默认最小连接数是3,设置为0
  44. dataSource.setMinPoolSize(0);
  45. //默认最长空闲时间为0,即不会回收空闲连接,设置为10秒
  46. dataSource.setMaxIdleTime(10);
  47. //默认为不开启 prepareStatement 缓存,设置为最大缓存5个
  48. dataSource.setMaxStatements(5);
  49. jdbcTemplate = new JdbcTemplate(dataSource);
  50. } catch (Exception e) {
  51. throw new IllegalStateException("数据库连接创建失败", e);
  52. }
  53. }
  54. }
  55. }
  56. return jdbcTemplate;
  57. }
  58.  
  59. /**
  60. * 获取单例的jdbcTemplate,基于dbcp
  61. *
  62. * @return
  63. */
  64. public static JdbcTemplate getJdbcTemplateByDbcp() {
  65. if (jdbcTemplate == null) {
  66. synchronized (JdbcTemplateFactory.class) {
  67. if (jdbcTemplate == null) {
  68. try {
  69. //读取配置文件
  70. Map<String, String> jdbcProps = PropertiesUtil.getPropertiesMap("jdbc.properties");
  71. //创建连接池
  72. BasicDataSource dataSource = new BasicDataSource();
  73. dataSource.setUrl(jdbcProps.get("jdbc.url"));
  74. dataSource.setUsername(jdbcProps.get("jdbc.username"));
  75. dataSource.setPassword(jdbcProps.get("jdbc.password"));
  76. dataSource.setInitialSize(3);
  77.  
  78. //默认为不起动回收器,设置为30秒执行一次回收器
  79. dataSource.setTimeBetweenEvictionRunsMillis(30 * 1000);
  80. //默认为30分钟不使用的连接被认为空闲,设置为10秒钟
  81. dataSource.setMinEvictableIdleTimeMillis(10 * 1000);
  82. //开启 prepareStatement 缓存
  83. dataSource.setPoolPreparedStatements(true);
  84. jdbcTemplate = new JdbcTemplate(dataSource);
  85. } catch (Exception e) {
  86. throw new IllegalStateException("数据库连接创建失败", e);
  87. }
  88. }
  89. }
  90. }
  91. return jdbcTemplate;
  92. }
  93.  
  94. }

一个小应用的dbcp和c3p0配置实例的更多相关文章

  1. spring中通过JNDI、DBCP、C3P0配置数据源

    JNDI配置数据源 1.首先在tomcat的server.xml中配置数据源信息,找到Context,然后在里边加入如下代码 <Context docBase="SpringDemo& ...

  2. 【先定一个小目标】Postgresql允许远程访问配置修改

    1.解决不能连接远程postgresql: postgresql默认情况下,远程访问不能成功,如果需要允许远程访问,需要修改两个配置文件,说明如下: 1.postgresql.conf 将该文件中的l ...

  3. JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包. 二.使用C3P0配 ...

  4. mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会

    <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...

  5. 痞子衡嵌入式:关于i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区. 关于串行四线NOR Flash,当其作 ...

  6. 解密httpclient,dbcp,jedis,c3p0,druid,okhttp都在使用的连接池技术

    最近在连接池上面栽了个跟头(参见这里),引起我对池技术的强烈关注,这几天总结了一下很多场景都会使用的池技术: 池概念 pool,中文翻译为水池,但是在英文中,还有一种解释是 an organizati ...

  7. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  8. jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用

    一.连接池的概念和使用 在实际应用开发中,特别是在WEB应用系统中,如果JSP.Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接.打开数据库.存取数 ...

  9. JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar

随机推荐

  1. wrk 网站压力测试

    下载安装 wrk [root@aikaiyuan ~]# git clone https://github.com/wg/wrk.gitInitialized empty Git repository ...

  2. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...

  3. SSH与EJB 比较

    SSH完全的开源产品,如果用SSH就必然会用到大量的开源的东东,从数据库到逻辑到控制到前端,开源产品大拼装, 其中SSH中的三大核心,Struts相当于JSF,spring相当于EJB,hiberna ...

  4. 微信wap开发,页面显示元素不全-微信开发(asp.net)

    最近在开发的微信的微商城,出现这样一种情况: pc上浏览正常,但是一到手机上浏览就会缺少部分元素 解决办法: 找了很多原因,还通过uc浏览器把网页到存下来了,发现并没有缺少元素,只是没有显示出来,后来 ...

  5. Flv 视频格式(转)

    最近要用到flv,整理了一些flv格式的资料,供参考. flv文件主要由两部分组成:header和body. 1.header header部分记录了flv的类型.版本等信息,是flv的开头,一般都差 ...

  6. 【环境】Linux下连接无线网常用命令

    启用/重启/关闭 网络服务 /etc/init.d/networking start /etc/init.d/networking restart /etc/init.d/networking sto ...

  7. Netty 中文教程 Hello World !详解

    1.HelloServer 详解 HelloServer首先定义了一个静态终态的变量---服务端绑定端口7878.至于为什么是这个7878端口,纯粹是笔者个人喜好.大家可以按照自己的习惯选择端口.当然 ...

  8. c++ 枚举 在函数中的应用

    #include <iostream> using namespace std; enum RespErrNo { SUCCESS = , INVALID_URL = , INVALID_ ...

  9. "Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7

    1.错误背景 系统安装了.net framework4.0.4.5,项目先使用VS2013(4.5)开发,后来又重新用VS2010开发(4.0),运行时出现这个错误 2.错误原因 In .Net 4. ...

  10. git如何ignore

    今天新建了一个项目传到git上,但是每次编译都会有一些无用的文件生成,于是就编写了ignore.但是发现无用.因为你的文件已经上传到服务器了,再编写ignore就无用了,ignore的适用是文件没上传 ...