一个小应用的dbcp和c3p0配置实例

以下是一个小应用的数据库连接池配置,包括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     /**
24      * 获取单例的jdbcTemplate,基于c3p0
25      *
26      * @return
27      */
28     public static JdbcTemplate getJdbcTemplate() {
29         if (jdbcTemplate == null) {
30             synchronized (JdbcTemplateFactory.class) {
31                 if (jdbcTemplate == null) {
32                     try {
33                         //读取配置文件
34                         Map<String, String> jdbcProps = PropertiesUtil.getPropertiesMap("jdbc.properties");
35                         //创建连接池
36                         ComboPooledDataSource dataSource = new ComboPooledDataSource();
37                         dataSource.setJdbcUrl(jdbcProps.get("jdbc.url"));
38                         dataSource.setUser(jdbcProps.get("jdbc.username"));
39                         dataSource.setPassword(jdbcProps.get("jdbc.password"));
40                         //默认初始化连接为3,设置为0
41                         dataSource.setInitialPoolSize(0);
42                         //默认每次创建连接数为3,设置为1
43                         dataSource.setAcquireIncrement(1);
44                         //默认最小连接数是3,设置为0
45                         dataSource.setMinPoolSize(0);
46                         //默认最长空闲时间为0,即不会回收空闲连接,设置为10秒
47                         dataSource.setMaxIdleTime(10);
48                         //默认为不开启 prepareStatement 缓存,设置为最大缓存5个
49                         dataSource.setMaxStatements(5);
50                         jdbcTemplate = new JdbcTemplate(dataSource);
51                     } catch (Exception e) {
52                         throw new IllegalStateException("数据库连接创建失败", e);
53                     }
54                 }
55             }
56         }
57         return jdbcTemplate;
58     }
59 
60     /**
61      * 获取单例的jdbcTemplate,基于dbcp
62      *
63      * @return
64      */
65     public static JdbcTemplate getJdbcTemplateByDbcp() {
66         if (jdbcTemplate == null) {
67             synchronized (JdbcTemplateFactory.class) {
68                 if (jdbcTemplate == null) {
69                     try {
70                         //读取配置文件
71                         Map<String, String> jdbcProps = PropertiesUtil.getPropertiesMap("jdbc.properties");
72                         //创建连接池
73                         BasicDataSource dataSource = new BasicDataSource();
74                         dataSource.setUrl(jdbcProps.get("jdbc.url"));
75                         dataSource.setUsername(jdbcProps.get("jdbc.username"));
76                         dataSource.setPassword(jdbcProps.get("jdbc.password"));
77                         dataSource.setInitialSize(3);
78 
79                         //默认为不起动回收器,设置为30秒执行一次回收器
80                         dataSource.setTimeBetweenEvictionRunsMillis(30 * 1000);
81                         //默认为30分钟不使用的连接被认为空闲,设置为10秒钟
82                         dataSource.setMinEvictableIdleTimeMillis(10 * 1000);
83                         //开启 prepareStatement 缓存
84                         dataSource.setPoolPreparedStatements(true);
85                         jdbcTemplate = new JdbcTemplate(dataSource);
86                     } catch (Exception e) {
87                         throw new IllegalStateException("数据库连接创建失败", e);
88                     }
89                 }
90             }
91         }
92         return jdbcTemplate;
93     }
94 
95 }

 

posted @ 2013-07-12 14:28  baibaluo  阅读(711)  评论(1编辑  收藏  举报