一个小应用的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 }

 

你可能感兴趣的:(c3p0)