连接池管理数据库连接
数据库连接的建立及关闭时非常消耗资源的操作,尤其多层架构的应用环境中,这种资源消耗对系统的影响更明显,频繁的打开、关闭连接将造成系统性能低下,数据库连接池的解决方案大大缓解了这个难题即当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池,每次应用程序请求数据库连接时,无须重新打开连接,而是从连接池中取出已有的连接使用,用完后不再关闭数据库连接,而是直接将连接还给连接池,这将大大降低系统开销
JDBC2.0规范引入了数据库连接池技术,通过几个参数管理连接池:
- 数据库的初始连接数
- 连接池的最大连接数
- 连接池的最小连接数
- 连接池每次增加的容量
JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由商用服务器(如WebLogic、WebSphere)提供实现,也有一些开源组织提供实现(如DBCP和C3P0等)
DBCP
DBCP是Apache的开源连接池实现,该连接池依赖common-pool,如果需要使用该连接池,则需要增加commons-dbcp.jar和commons-pool.jar,可以通过https://commons.apache.org/下载
Tomcat的连接池正式采用该连接池实现的,数据库连接池既可以与应用服务器整合使用,也可以由应用程序独立使用
//创建数据源对象
BasicDataSource ds=new BasicDataSource();
//设置连接池所需的驱动
ds.setDriverClassName("com.mysql.jdbc.Driver");
//设置连接数据库的URL
ds.setUrl("jdbc:mysql://localhost:3306/javaee");
//设置连接数据库的用户名
ds.setUsername("root");
//设置连接数据库的密码
ds.setPassword("pass");
//设置连接池的初始连接数
ds.setInitialSize(5);
//设置连接池最多可以有多少个活动连接数
ds.setMaxActive(20);
//设置连接池中最少有两个空闲连接
ds.setMinIdle(20);
//通过数据源获取数据库连接
Connection conn = ds.getConnection();
//释放数据源连接
conn.close();
数据源和数据库连接不同,它无须创建多个,它是产生数据库连接的工厂,整个应用只需要一个数据源即可,也就是说对于一个应用,上面的代码只要执行一次即可,因此建议将ds设置成static成员变量,并且在应用开始时立即初始化数据源对象,程序中所有需要获取数据库连接地方直接访问该ds对象并获取连接即可
C3P0
C3P0的性能更好,它不仅可以自动清理不再使用的Connection,还可以自动清理Statement和ResultSet,如果要使用C3P0需要增加c3p0-0.9.1.2.jar它是C3P0的具体实现,可以通过http://sourceforge.net/projects/c3p0/下载
// 创建连接池实例
ComboPooledDataSource ds = new ComboPooledDataSource();
//设置连接池连接数据库所需的驱动
ds.setDriverClass("com.mysql.jdbc.Driver");
//设置连接数据库的URL
ds.setJdbcUrl("jdbc:mysql://localhost:3306/javaee");
//设置连接数据库的用户名
ds.setUser("root");
//设置连接数据库的密码
ds.setPassword("pass");
//设置练级吃的最大连接数
ds.setMaxPoolSize(40);
//设置连接池的最小连接数
ds.setMinPoolSize(2);
//设置连接池的初始连接数
ds.setInitialPoolSize(10);
//设置连接池的缓存Statement的最大数
ds.setMaxStatements(180);
2万+

被折叠的 条评论
为什么被折叠?



