1.什么是数据库连接池
Apache-DBCP连接池组件下载地址
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
2.为什么需要数据库连接池?
当对数据库的访问过大时,如果没有数据库连接池,那么频繁的对数据库进行连接、关闭连接等操作对数据库的压力是非常大的;如果使用了数据库连接池则同时访问数据库的连接就会被很好的控制,从而提高性能。
2.关键配置
为了发挥数据库连接池的作用,在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
最小连接数setMinIdle():
是数据库一直保持的数据库连接数,所以如果应用程序对数据库连接的使用量不大,将有大量的数据库资源被浪费。
初始化连接数setInitialSize():
连接池启动时创建的初始化数据库连接数量。
最大连接数setMaxIdle():
是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求被加入到等待队列中。如果设置为非正数则表示不限制。
最大等待时间setMaxWaitMillis():
当没有可用连接时,连接池等待连接被归还的最大时间,超过时间则抛出异常,可设置参数为0或者负数使得无限等待(根据不同连接池配置)。
//可以创建这样一个工具类
public class ConnectionManager {
private static String DRIVER = "com.mysql.jdbc.Driver";
private static String URL = "jdbc:mysql:///t_message"; //"jdbc:mysql:///t_message"
private static String USERNAME = "root";
private static String PASSWORD = "rootroot";
private static BasicDataSource datasource = new BasicDataSource();
static {
datasource.setDriverClassName(DRIVER);
datasource.setUrl(URL);
datasource.setUsername(USERNAME);
datasource.setPassword(PASSWORD);
datasource.setInitialSize(5);
datasource.setMaxIdle(20);
datasource.setMinIdle(5);
datasource.setMaxWaitMillis(3000);
}
/**
* 获取数据库连接池
* @return
*/
public static DataSource getDataSource(){
return datasource;
}
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(DRIVER);
conn = datasource.getConnection();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
throw new DataAccessException("数据库连接异常");
}
return conn;
}
}
网友评论