创建一个工具类:JDBCUtils
package com.example.demo.Util;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;
import java.util.Queue;
/**
* @ClassName: JDBCUtils
* @Description: 实现连接池效果,初始化10个JDBC连接对象并放入池中,提供方法每次返回一个对象
* @Author: xuezhouyi
* @Version: V1.0
**/
@Slf4j
public class JDBCUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
//连接池
private static Queue<Connection> pool = new LinkedList<>();
static {
Properties properties = new Properties();
InputStream is = null;
try {
is = JDBCUtils.class.getClassLoader().getResourceAsStream("mysql.properties");
properties.load(is);
driver = properties.getProperty("mysql.driver");
url = properties.getProperty("mysql.url");
username = properties.getProperty("mysql.username");
password = properties.getProperty("mysql.password");
} catch (Exception e) {
e.printStackTrace();
}
//创建三个连接对象(包装类对象)放到池子中
for (int i = 0; i < 10; i++) {
Connection connection;
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
Connection connectionWrapper = new ConnectionWrapper(connection, pool);
pool.add(connectionWrapper);
} catch (Exception e) {
e.printStackTrace();
}
log.info("第" + i + "个连接对象放入池中");
}
}
//返回连接对象
public static Connection getConnection() {
Connection connection = null;
if (pool.size() > 0) {
connection = pool.poll();
} else {
//等待超时,返回一个新创建的对象
try {
connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
log.info("取出一个对象后,当前池子中有" + pool.size() + "个对象");
return connection;
}
}
实现Connection接口修改close方法
package com.example.demo.Util;
import lombok.extern.slf4j.Slf4j;
import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaD