import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;
public class JDBC {
// 数据库连接池
private LinkedList<Connection> datasource = new LinkedList<Connection>();
private static JDBC instance = null;
static {
try {
String driver = ConfigurationManager.getProperty(Constants.JDBC_DRIVER);//com.mysql.jdbc.Driver
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
private JDBC() {
// 首先第一步,获取数据库连接池的大小,就是说,数据库连接池中要放多少个数据库连接
// 这个,可以通过在配置文件中配置的方式,来灵活的设定
int datasourceSize = ConfigurationManager.getInteger(Constants.JDBC_DATASOURCE_SIZE);//大小
// 然后创建指定数量的数据库连接,并放入数据库连接池中
for (int i = 0; i < datasourceSize; i++) {
String url = ConfigurationManager.getProperty(Constants.JDBC_URL);
String user = ConfigurationManager.getProperty(Constants.JDBC_USER);
String password = ConfigurationManager.getProperty(Constants.JDBC_PASSWORD);
try {
Connection conn = DriverManager.getConnection(url, user, password);
datasource.push(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取该类的单例
* @return 单例
*/
public static JDBC getInstance() {
if (instance == null) {
synchronized (JDBC.class) {
if (instance == null) {
instance = new JDBC();
}
}
}
return instance;
}
/**
* 提供获取数据库连接的方法
* 有可能,你去获取的时候,这个时候,连接都被用光了,你暂时获取不到数据库连接
* 所以我们要自己编码实现一个简单的等待机制,去等待获取到数据库连接
*/
public synchronized Connection getConnection() {
while (datasource.size() == 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return datasource.poll();
}
public static void main(String[] args) {
JDBC jdbc = new JDBC();
for (Connection connection : jdbc.datasource) {
System.out.println(connection);
}
}
}
JDBC应用单例模式构造简单连接池
于 2022-01-21 09:11:03 首次发布