1、复习:Tomcat连接池
tomcat连接池
a、配置context.xml
<!--context.xml-->
<Resource name="DatabaseConnection"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
maxIdle="30"
maxWait="10000"
maxActive="100"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webtest2"
/>
b、配置web.xml
<!--web.xml-->
<resource-ref>
<res-ref-name>DatabaseConnection</res-ref-name>
<res-auth>Container</res-auth>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
c、和数据库建立链接
.....省略.......
Context initCon = new InitialContext();
Context context = (Context)initCon.lookup("java:comp/env");
DataSource ds = (DataSource)context.lookup("DatabaseConnection");
connection = ds.getConnection();
......省略........
2、学习:DBCP连接池
需要两个jar包
DBCP连接池
a、第一种方式:通过BasicDataSource对象拿到DataSource
新建一个DBCPDataSource类
// DBCPDataSource.java
package org.zjy.dao;
import org.apache.commons.dbcp.BasicDataSource;
import javax.sql.DataSource;
public class DBCPDataSource {
/**
* 根据BasicDataSource拿datasource
* BasicDataSource是DataSource的子类
* @return DataSource
*/
public DataSource getDataSourceFromBasicDataSource(){
BasicDataSource basicDS = new BasicDataSource();
basicDS.setDriverClassName("com.mysql.jdbc.Driver"); // 加载驱动类
basicDS.setUrl("jdbc:mysql://localhost:3306/webtest2?useUnicode=true&characterEncoding=utf-8&useSSL=false"); // 设置数据库链接
basicDS.setUsername("root"); // 用户名
basicDS.setPassword("root"); // 密码
basicDS.setInitialSize(300); // 初始化连接数量
basicDS.setMaxActive(250); // 最大活动链接
basicDS.setMinIdle(50); // 最小空闲链接
return basicDS;
}
}
Connection connection = null;
DBCPDataSource dbcp = new DBCPDataSource();
// 最后两句才是重点:通过BasicDataSource获取到DataSource对象,并建立链接
DataSource dataSource = dbcp.getDataSourceFromBasicDataSource();
connection = dataSource.getConnection();
、、、省略、、、、
BasicDataSource对象的常用方法
b、第二种方式:通过BasicDataSourceFactory拿到DataSource(需要配置dbcpconfig.properties文件)
项目结构
dbcpconfig.properties文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/webtest2
username=root
password=root
initialSize=10
package org.zjy.dao;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
public class DBCPDataSource {
/**
* 根据BasicDataSourceFactory拿datasource
* @return DataSource
*/
public DataSource getDataSourceFromBasicDataSourceFactory() throws Exception {
DataSource dataSource = null;
// 将文件名转为输入流(唯一可行)
InputStream is = new DBCPDataSource().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
// 想办法将文件读取为输入流时,百度了几种方法,下面两种不可行
//InputStream is = new ByteArrayInputStream("dbcpconfig.properties".getBytes()); // 会报错,读不到classname和url
//InputStream is = new FileInputStream("/dbcpconfig.properties"); // 会报错,找不到文件
Properties properties = new Properties();
// 载入配置文件
properties.load(is);
// 获取输入流
dataSource = BasicDataSourceFactory.createDataSource(properties);
return dataSource;
}
}
建立链接过程和之前基本一致,不再赘述