JDBC数据库连接池之dbcp
一、连接池的作用
数据库的连接是一种很重要的资源,如果一个项目比较小,连接数据库的次数比较少,我们可以采取直连的方式:“获取连接----使用----关闭连接”。但是如果一个网站访问量很大,假如同时有几百万个用户,这时候就会创建几百万个连接,这样就很容易使数据库崩溃,从而使网站瘫痪。这时候数据库的连接池技术就可以起到作用了,维护连接池中的连接个数,如果来个请求连接,先看连接池中是否有空闲的连接,如果有就分配出去,用完就释放,否则这个请求就必须等待。这就很好的解决了数据库的压力。这就像去餐厅一样,人多的时候我们就得排号等待空闲的位置。
二、dbcp的使用
1.导入jar包。
dbcp依赖3个jar包。
commons-dbcp2-2.1.1.jar
commons-logging-1.1.1.jar
commons-pool2-2.4.2.jar
另外连接数据库还需要单独的jar包,我的数据库是MySql,所以我用的是:mysql-connector-java-5.1.14.jar
2.配置参数
方式1.:通过配置文件配置(dbcp.properties)
1 driverClassName=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost/paper_tag 3 username=root 4 password=admin 5 maxActive=30 6 maxIdle=10 7 maxWait=1000 8 initialSize=5
方式2:通过代码配置
BasicDataSource bds = new BasicDataSource(); bds.setUrl(url); bds.setDriverClassName(driverClassName); bds.setUsername(username); bds.setPassword(password); bds.setInitialSize(initialSize); bds.setMaxActive(maxActive); bds.setMinIdle(minIdle); bds.setMaxIdle(maxIdle); bds.setMaxWait(maxWait);
3. 获取连接
-
下面是获取连接的类DBCPUtil
private static DataSource ds; private static final String configFile = "/dbcp.properties"; public DBCPUtil() { initDBCP(); } private void initDBCP() { Properties prop = new Properties(); try { prop.load(Object.class.getResourceAsStream(configFile)); ds = BasicDataSourceFactory.createDataSource(prop); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public Connection getConn() { Connection conn = null; if(ds != null) { try { conn = ds.getConnection(); conn.setAutoCommit(false); } catch (SQLException e) { e.printStackTrace(); } } return conn; } public static void main(String[] args) { DBCPUtil db = new DBCPUtil(); System.out.println(db.getConn()); } }