您的位置:首页 > 其它

jdbc------连接池代理

2016-01-13 11:55 253 查看
代理:

动态代理模式:

java中代理模式:动态/静态/Cglib代理(Spring)

接口,某个方法,扩展,不想实现所有方式

Connection ,close 扩展,不实现所有方法。

动态代理

监测,接口中,方法的执行。

close()方法,如何对Connection对象,

生成一个代理对象,

---proxy

static Object newProxyInstance(

ClassLoader loader,//当前使用的类加载器

Class<?>[] interfaces, //目标对象实现的接口

InvocationHandler h //事件处理器,执行接口方法,自动触发处理器代码,把当前执行方法作为参数传入。

)

代理:要检测close方法的执行,要把连接放回连接池,

执行close方法时候,执行了这个代码,检测了这个方法执行

如果还想检测其他的方法

写else。if...

"".equals(equals.name)从而增加一些额外的业务操作

现在讲的代理,,回去用

关于java中的三个代理

静态,动态,springcglib

private Connection createConnection(){

try {

Class.forName("com.mysql.jdbc.Driver");

//原始的目标对象

final Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_demo","root","root");

/**

* 对conn创建代理对象

*/

Connection proxy=(Connection)Proxy.newProxyInstance(

conn.getClass().getClassLoader() ,//类加载器

conn.getClass().getInterfaces(),//目标对象实现的接口

new InvocationHandler() { //事件处理器,调用conn对象方法的时候会自动触发处理事件。

@Override

public Object invoke(Object proxy, Method method, Object[] arg2)

throws Throwable {

Object result=null;

String methodName=method.getName();

if("close".equals(methodName)){

System.out.println("begin:当前执行的close方法开始:");

pool.addLast(conn);

System.out.println("end:当前连接已经放入连接池了");

}

return proxy;

}

}

);

return conn;

} catch (Exception e) {

// TODO Auto-generated catch block

throw new RuntimeException(e);

}

}

2、DPCB

开源的连接池技术

1.javax.sql.DataSource:

sun公司规定,如果是连接池技术,需要实现一个接口

2.DPCB数据库连接池:(tomcat)

C3P0数据库连接池:(hibernate)

3.DBCP:

核心类:BasicDataSource

4.配置方式实现JDBC连接池,

package cn.itcast.c_dbcp;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import org.junit.Test;

public class APP_DBCP {

/**

* 1.硬编码方式实现连接池

* @throws Exception

*/

//@Test

public void testDBCP() throws Exception{

//1.DBCP连接池核心类

BasicDataSource dataSource=new BasicDataSource();

//2.配置连接池参数,初始化连接数,最大连接数/连接字符串,驱动,用户名,密码

dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc_demo");

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

dataSource.setUsername("root");

dataSource.setPassword("root");

dataSource.setInitialSize(3);

dataSource.setMaxActive(6);

dataSource.setMaxIdle(3000);

//2.获取连接

Connection conn=dataSource.getConnection();

conn.prepareStatement("delete from admin where id=5").executeUpdate();

//

conn.close();

}

/**

* 配置方式实现连接池,便于维护

*/

@Test

public void testProp()throws Exception{

//1.创建配置文件

Properties prop=new Properties();

//2.创建输入流

InputStream in=APP_DBCP.class.getResourceAsStream("db.properties");

//2.加载属性文件

prop.load(in);

DataSource dataSource=BasicDataSourceFactory.createDataSource(prop);

Connection conn=dataSource.getConnection();

conn.prepareStatement("delete from admin where id=4").executeUpdate();

//

conn.close();

}

}

3.C3P0

DBCP

两个ar文件

1.硬编码方式

BasicDataSource =new

2.配置方式

Properties:map(实现map)接口:简单的程序,key--value

xml:关系型数据。根节点,中国--省份---城市--镇--乡--村

第二种开源连接池:

C3P0:

最常用的 连接池技术。Spring ,默认支持C3P0连接池技术。

核心类:ComboPooledDataSource ds;

使用

(1)导入jar包

(2)使用连接池,创建连接

a:硬编码方式

b:配置方式(xml)

package cn.itcast.d_c3p0;

import java.sql.Connection;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class APP_C3P0 {

/**

* 1。硬编码方式。使用C3P0

*/

//@Test

public void testCode() throws Exception{

//1.创建C3P0连接池的核心工具类对象。

ComboPooledDataSource ds=new ComboPooledDataSource();

//2.设置连接参数,url,驱动,用户名,密码,初始化连接数,最大连接数

ds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc_demo");;

ds.setDriverClass("com.mysql.jdbc.Driver");

ds.setUser("root");

ds.setPassword("root");

ds.setInitialPoolSize(3);

ds.setMaxPoolSize(6);

ds.setMaxIdleTime(3000);

Connection conn=ds.getConnection();

conn.prepareStatement("delete from admin where id=6").executeUpdate();

conn.close();

}

/**

* 2.xml配置方式,使用C3P0连接池管理

*/

@Test

public void testXML()throws Exception{

ComboPooledDataSource ds=new ComboPooledDataSource();

Connection conn=ds.getConnection();

conn.prepareStatement("delete from admin where id=1").executeUpdate();

conn.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: