以下是一个小应用的数据库连接池配置,包括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;
} }

一个小应用的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. 【转】微软MVP攻略 (如何成为MVP?一个SQL Server MVP的经验之谈)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 初衷 什么是微软MVP? 成为微软MVP的条件? 如何成为微软MVP? (一) 申请时间划分 (二) 前期准备 (三) ...

  2. 怎样在cmd(命令提示符)下进行复制粘贴操作

    如右图,右键命令提示符窗口的标题栏,选择属性.     选择“编辑选项”里的“快速编辑模式”,并确定之:   在弹出的应用选择提示框上选择“保存属性,供以后具有相同标题的窗口使用”:   如此你就可以 ...

  3. div+css登陆界面案例2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. android ble connect slowly

    Hi I'm writing an Android app to connect to a BLE peripheral device. Android 4.4.2, Galaxy Nexus. I ...

  5. std::function赋值的几种方法

    定义: #include <functional> std::function<void(const QString&)> myPrintFunction; 函数指针 ...

  6. OC的@property 和 @synthesize id

    学习java的JDBC,成员变量的setter和getter,eclipse都能帮我们自动生成:当然xcode这款编译器也很强大,也能自动生成: 1:@property @property是写在类的声 ...

  7. webview加载本地html

    //webView.loadUrl("file:///android_asset/index.html"); 加载assets目录中含有的index.html  webView.l ...

  8. C# - (0x80040154): Retrieving the COM class factory for component with CLSID {877AA945-1CB2-411C-ACD7-C70B1F9E2E32} failed

    1. Exeption Error: System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM clas ...

  9. SOLID architecture principles using simple C# examples

    转:http://www.codeproject.com/Articles/703634/SOLID-architecture-principles-using-simple-Csharp?msg=4 ...

  10. spring @resource @ Autowired

    Spring中什么时候用@Resource,什么时候用@service 当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类 ...