连接池

连接池


预先创建一组连接,用的时候取出,用完后放入连接池;
连接池(集合)
实现思路:
1.指定初始化连接数目
(App启动的时候,就执行创建)
2.指定最大连接数目
3.指定当前使用连接个数
代码实现:
1.MyPool.java连接池类
2.指定全局参数:初始化数目 最大连接数 当前连接 连接池集合
3.构造函数,循环创建3个连接
4.写一个创建连接的方法
5.获取连接
池中有连接,直接拿;
没有的话,需要判断是否超出最大连接数
6.释放连接

代理

代理:如果对接口中的某个指定方法的功能进行扩展,而不想实现接口里的所有方法,可以使用动态代理的方式

当关闭连接的时候,要把连接放入连接池。当调用Connection接口的close方法的时候,希望触发pool.addLast(con)操作,把连接放入连接池;
解决方式:

    1.静态代理
    2.动态代理

java使用代理模式,静态动态代理

如何对connection生成代理
Proxy
static Object newProxyInstance(
ClassLoader loader, 当前使用的类加载器
Class

    private Connection ceateConnection(){

        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManagement.getConnection("jdbc:mysql:///test","user","password");
        Connection proxy=(Connection)Proxy.newProxyInstance(
            con.getClass().getClassLoader(),   //类加载器
            con.getClass().getInterfaces(),    //目标对象实现的接口
            new InvocationHandler(){
//当执行这个Connection接口中的所有方法都会执行上述这一段代码,我们只需要对close方法进行处理,即methodName=close方法的时候,把连接放入连接池。
                public Object invoke(Object proxy,Method method,Object[] args){
                        Object result=null;
                        //当前执行方法的方法名字
                        String methodName=method.getName();

                        if("close".equals(methodName)){
                            System.out.println("begin:当前执行close方法开始");
                            pool.addLast(con);                                                              System.out.println("连接已经放入连接池");
                        }else{

                        }

                        //调用目标对象方法
                        method.invoke(con,args);
                        return result;
                }
        }
        )


    }

当具体目标是一个类的时候,可以

Class.forName(“com.mysql.jdbc.Driver”);
final Connection con=DriverManager.getConnection(“jdbc:mysql:///test”,”user”,
)
con.getClass().getInterfaces() 当目标对象是一个具体的类的时候
new Class[]{Connection.class}, //目标对象实现的接口

DBCP连接池

硬编码方式

    BasicDataSource dataSource=new BasicDataSource();
        //连接池参数设置,初始化连接数、最大连接数、连接字符串、驱动、用户、密码
BasicDataSource dataSource=new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("qqaazz");

        dataSource.setInitialSize(3);
        dataSource.setMaxTotal(6);
        dataSource.setMaxIdle(3000);

properties加载

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;

//加载property配置文件
        Properties prop=new Properties();
        InputStream in=APP_DBCP.class.getResourceAsStream("db.properties");
        prop.load(in);  
        DataSource dataSource=BasicDataSourceFactory.createDataSource(prop);
//      DataSource dataSource=BasicDataSourceFactory.createDataSource(prop);
        Connection connection=dataSource.getConnection();
        connection.prepareStatement("delete from student where id=4").executeUpdate();

C3P0连接池

核心类:CombopoolDataSource ds;
使用:下载,引入jar文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值