1.本章目标
了解连接池
掌握JNDI.DBCP链接池的使用
2.连接池
理解为一个带有多个连接的池子
比如:
连接池最小连接数:10,也就是该连接池初始化时有10个可用的连接
连接池有最大连接数:100,表示该连接池最大上限100个连接
当有请求连接数据库时,先判断10个连接是否有空闲.
若有,就直接分配一个链接.
若没有(10不够)就在小于最大连接数的前提下打开一个新的连接
若已经有100个连接都在使用,后面的请求会等待前面使用完成后释放连接,在使用
3.JDNI
java naming and directory interface: java命名和目录接口.顾名思义就是提供java的名称和目录方面的操作
用途:
连接对象,连接jdbc资源,简介jms资源,连接javamail资源
tomcat实现jndi提供一种连接池技术(不常用)
步骤:
1.将连接数据库的驱动jar包拷贝到tomcat/lib目录
2.tomcat/conf/context.xml中配置数据源(数据的来源,通常指数据库,数据源中存放了建立数据库连接的信息)
auth="Container" //资源管理者
type="javax.sql.DataSource" //资源所属的类型
initialSize="1" //初始化连接数
maxActive="10" //最大连接数
minIdle="0" //最小空闲数,0,不受限
maxIdle="0" //最大空闲数,0,不受限
maxWait="5000" //最大等待时间
username="root" password="123456" url="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF8" driverClassName="com.mysql.jdbc.Driver"
>
3.在web.xml中配置数据源引用
jndiResource
javax.sql.DataSource
Container
private static DataSource ds = null; //数据源
/*** 获取一个连接对象
*@return返回一个连接对象*/
public staticConnection getConnection() {
Connection conn= null;try{if(ds == null){//上下文
Context context = newInitialContext();//从上下文对象中获取数据源 jndiResource:数据源名称
ds = (DataSource) context.lookup("java:comp/env/jndiResource");
}//从数据源中获取连接对象
conn =ds.getConnection();
}catch(Exception e) {
e.printStackTrace();
}returnconn;
}
java连接数据库代码
注意:关闭数据库 不是关闭 而是//将连接对象放入连接池中
0、DBCP简介
DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目。DBCP通过连接池预先同数据库建立一些连接放在内存中(即连接池中),应用程序需要建立数据库连接时直接到从接池中申请一个连接使用,用完后由连接池回收该连接,从而达到连接复用,减少资源消耗的目的。
1、DBCP所依赖的jar包(以下例子基于如下jar包版本)
commons-dbcp2-2.1.1.jar commons-logging-1.2.jar commons-pool2-2.4.2.jar
#初始化连接数
dbcp.initialSize=1dbcp.maxTotal=10dbcp.maxIdle=0dbcp.minIdle=0dbcp.maxWaitMillis=1dbcp.username=root
dbcp.password=123456dbcp.driverClassName=com.mysql.jdbc.Driver
dbcp.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8
dbcp.properties
private static DataSource ds = null; //数据源
/*** 获取一个连接对象
*@return返回一个连接对象*/
public staticConnection getConnection() {
Connection conn= null;//单例(在容器中只有一个对象,线程非安全)和多例(容器中有多个相同类型的对象,线程安全)
try{if(ds==null){
ds=getDataSourcer();
}
conn=ds.getConnection();
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}returnconn;
}public staticDataSource getDataSourcer(){
BasicDataSource bds=newBasicDataSource();
ResourceBundle bundle=ResourceBundle.getBundle("dbcp");
bds.setInitialSize(Integer.parseInt(bundle.getString("dbcp.initialSize")));
bds.setMaxTotal(Integer.parseInt(bundle.getString("dbcp.maxTotal")));
bds.setMaxIdle(Integer.parseInt(bundle.getString("dbcp.maxIdle")));
bds.setMinIdle(Integer.parseInt(bundle.getString("dbcp.minIdle")));
bds.setMaxWaitMillis(Integer.parseInt(bundle.getString("dbcp.maxWaitMillis")));
bds.setUsername(bundle.getString("dbcp.username"));
bds.setPassword(bundle.getString("dbcp.password"));
bds.setDriverClassName(bundle.getString("dbcp.driverClassName"));
bds.setUrl(bundle.getString("dbcp.url"));returnbds;
}
dbcp连接数据库java代码
直接拿来用!!
`