数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
根据自己浅显的Java数据库知识理解写出来连接池模拟:
package com.softeem.t1;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;
/**
* @ Author Jack Smith 2020/8/6 19:05
*/
public class Tools {
private static String DRIVER_CLASS;
private static String URL;
private static String USER;
private static String PASSWORD;
public static int MAXCONN;
static Map<Connection,Boolean> map = new HashMap<>();
static {
try {
//尚未赋予值,具体数值根据实际情况决定
InputStream is = Tools.class.getResourceAsStream("/jdbc.properties");
Properties p = new Properties();
p.load(is);
DRIVER_CLASS = p.getProperty("driver");
URL = p.getProperty("url");
USER = p.getProperty("user");
PASSWORD = p.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 设置最大连接数目
*
* @param num
*/
public static void setMaxActive(int num) {
for (int i = 0; i < num; i++) {
try {
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//将可用(空闲)连接设为属性true
map.put(conn,true);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取空闲连接
*
* @return
*/
public static synchronized Connection getConnection() {
for (Map.Entry<Connection, Boolean> entry : map.entrySet()){
if(entry.getValue()){
map.put(entry.getKey(),false);
return entry.getKey();
}
}
throw new RuntimeException("服务器忙...");
}
public static void close(Connection conn) {
Connection conn2=null;
try {
conn.close();
map.put(conn,true);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注:
导师指导下完成,如有雷同,那就是一个老师教的
代码有许多不足,欢迎留言讨论和更正