JAVA中使用DBCP做数据库连接池

原文链接

介绍了和Java,有关的知识、技巧、经验,和一些java源码等。自己还没完全理解,第一次用,但是代码可以用了,放上来,要不到时又不知丢那去,找不着了。代码中用的数据库连接,根据不同的数据库,应该把不同的驱动加到

工程里,这里用的是postgresql,可以到postgresql官网下载JAVA驱动包,最新的好象是8.1的。

[java]  view plain  copy
  1. import java.sql.Connection;   
  2. import java.sql.SQLException;   
  3. import java.sql.DriverManager;   
  4. import org.apache.log4j.Logger;   
  5.   
  6. import org.apache.commons.pool.ObjectPool;   
  7. import org.apache.commons.pool.impl.GenericObjectPool;   
  8. import org.apache.commons.dbcp.DriverManagerConnectionFactory;   
  9. import org.apache.commons.dbcp.ConnectionFactory;   
  10. import org.apache.commons.dbcp.PoolableConnectionFactory;   
  11. import org.apache.commons.dbcp.PoolingDriver;   
  12.   
  13. /**  
  14. * ݿ<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>连接缓冲池  
  15. */   
  16. public class DBPool {   
  17. private final static Logger logger = Logger.getLogger(DBPool.class);   
  18.   
  19. private static String dbIP = "192.168.0.132";   
  20.   
  21. private static String dbJdbc = "jdbc:postgresql://" + dbIP + "/sample";   
  22.   
  23. private static String dbUser = "sample";   
  24.   
  25. private static String dbPwd = "sample";   
  26.   
  27. private static Class driverClass = null;   
  28.   
  29. private static ObjectPool connectionPool = null;   
  30.   
  31. public DBPool() {   
  32. }   
  33.   
  34. /**  
  35. * 初始化数据源  
  36. */   
  37. private static synchronized void initDataSource() {   
  38. //驱动数据源   
  39. if (driverClass == null) {   
  40. try {   
  41. driverClass = Class.forName("org.postgresql.Driver");   
  42. catch (ClassNotFoundException e) {   
  43. logger.error(e.getMessage(), e);   
  44. }   
  45. }   
  46. }   
  47.   
  48. /**  
  49. * 连接池启动  
  50. * @throws Exception  
  51. */   
  52. public static void StartPool() {   
  53. // 记录连接源的字符串   
  54. logger.info(dbJdbc);   
  55.   
  56. // 初始化数据源   
  57. initDataSource();   
  58.   
  59. // 如果连接池为空   
  60. if (connectionPool != null) {   
  61. ShutdownPool();   
  62. }   
  63.   
  64. try {   
  65. connectionPool = new GenericObjectPool(null);   
  66. ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(   
  67. dbJdbc, dbUser, dbPwd);   
  68. PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(   
  69. connectionFactory, connectionPool, nullnullfalsetrue);   
  70. Class.forName("org.apache.commons.dbcp.PoolingDriver");   
  71. PoolingDriver driver = (PoolingDriver) DriverManager   
  72. .getDriver("jdbc:apache:commons:dbcp:");   
  73. driver.registerPool("dbpool", connectionPool);   
  74.   
  75. logger.info("Init Pool for Database Connection Succees.");   
  76. catch (Exception e) {   
  77. logger.error(e.getMessage(), e);   
  78. }   
  79. }   
  80.   
  81. /**  
  82. * 释放连接池  
  83. */   
  84. public static void ShutdownPool() {   
  85. try {   
  86. PoolingDriver driver = (PoolingDriver) DriverManager   
  87. .getDriver("jdbc:apache:commons:dbcp:");   
  88. driver.closePool("dbpool");   
  89. catch (SQLException e) {   
  90. logger.error(e.getMessage(), e);   
  91. }   
  92. }   
  93.   
  94. /**  
  95. * 打印连接池状态  
  96. */   
  97. public static String GetPoolStats() {   
  98.   
  99. StringBuffer stat = new StringBuffer();   
  100. try {   
  101. PoolingDriver driver = (PoolingDriver) DriverManager   
  102. .getDriver("jdbc:apache:commons:dbcp:");   
  103. ObjectPool connectionPool = driver.getConnectionPool("dbpool");   
  104.   
  105. stat.append("-- Active Connection: ");   
  106. stat.append(connectionPool.getNumActive());   
  107. stat.append(" ,");   
  108. stat.append("Free Connection: ");   
  109. stat.append(connectionPool.getNumIdle());   
  110. stat.append(" . --");   
  111. catch (Exception e) {   
  112. logger.error(e.getMessage(), e);   
  113. }   
  114. return stat.toString();   
  115. }   
  116.   
  117. /**  
  118. * 取得连接池中的连接  
  119. * @return  
  120. */   
  121. public static Connection getDbConnection() {   
  122. Connection conn = null;   
  123. if(connectionPool == null)   
  124. StartPool();   
  125. try {   
  126. conn = DriverManager   
  127. .getConnection("jdbc:apache:commons:dbcp:dbpool");   
  128. catch (SQLException e) {   
  129. logger.error(e.getMessage(), e);   
  130. }   
  131. return conn;   
  132. }   
  133.   
  134. }   


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值