使用apache dbcp在JDBC中实现连接池

编程入门 行业动态 更新时间:2024-10-15 10:15:59
本文介绍了使用apache dbcp在JDBC中实现连接池的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

这是实现池化的良好代码吗?我想在我的项目中实现这一点,该项目有30个线程并发运行,每个线程要求每个请求有四个以上的连接?此代码有效吗?

Is this Good Code to implement pooling? I want to implement this in my project which has 30 threads operating concurrently and each thread requires more than four connection for each request? Does this code work?

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Connection; import java.sql.SQLException; import org.apachemons.dbcp.BasicDataSource; /** * * @author * taher_JAVAHUNTER */ public class JDBCHelper { private final static String username = "root"; private final static String password = ""; private final static String url = "jdbc:mysql://localhost:3306/treamisdemo"; public static Connection connection = null; public static int connectionCount = 0; // public JDBCHelper(boolean setCon) { // try { // setConnectionTest(); // } catch (Exception e) { // System.out.println("Error in Connection:" + e.toString()); // } // } public static BasicDataSource dataSource; public static Connection getConnection() throws SQLException { try { if (dataSource == null) { dataSource = new BasicDataSource(); String driver = "com.mysql.jdbc.Driver"; try { dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setMaxActive(100); dataSource.setMaxWait(10000); dataSource.setMaxIdle(10); if (connection == null || connection.isClosed()) { System.out.println(" requeition CONNECTION WITH FIRST SERVER."); connection = dataSource.getConnection(); connectionCount++; } } catch (SQLException e) { System.out.println("***Connection Requisition*** Could not connect to the database msg :" + e.getMessage()); } } else { connection = dataSource.getConnection(); connectionCount++; } } catch (Exception e) { System.out.println("open connection exception" + e); } return connection; } public static void close(ResultSet c) { try { if (c != null) { c.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Statement c) { try { if (c != null) { c.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Connection c) { try { if (c != null) { c.close(); } } catch (SQLException e) { e.printStackTrace(); } } }

推荐答案

我会不推荐这种方法.您基本上是在创建连接并将其挂起.我不喜欢您的模式,但是这样会更好:

I would not recommend this approach. You are basically creating a connection and hanging on it it. I'm not in love with your pattern, but something like this would be better:

public class DataTransaction { private final static BasicDataSource dataSource; static { dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/registrationtest"); dataSource.setUsername("root"); dataSource.setPassword("root"); dataSource.setMaxActive(100); dataSource.setMaxWait(10000); dataSource.setMaxIdle(10); } private DataTransaction() { } public static DataSource getDataSource() { return dataSource; } }

此外,我不会对任何DataSource参数进行硬编码,而是从属性文件初始化DataSource.

Further, I would not hardcode any of the DataSource parameters, but rather initialize the DataSource from a properties file.

更多推荐

使用apache dbcp在JDBC中实现连接池

本文发布于:2023-11-25 23:40:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631811.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:连接池   apache   dbcp   JDBC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!