本文介绍了使用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.apache.commons.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中实现连接池的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!