连接池
来源:互联网 发布:mac如何彻底关机 编辑:程序博客网 时间:2024/05/19 20:38
连接池
预先创建一组连接,用的时候取出,用完后放入连接池;
连接池(集合)
实现思路:
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
- 连接池连接mysql
- 连接池管理连接
- 连接池连接数据库
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 图片格式转换--从bmp到yuv420p
- 轻松实现本地缓存的创建,读取,删除
- CCF CSP 201612-1 中间数(Java-100分)
- ART和Dalvik虚拟器的区别
- 575 Distribute Candies 分发糖果问题
- 连接池
- Cache-Control: no-cache和no-store
- 网络获取tablayout数据
- el表达式比较
- MapReduce 编程模板
- PHP学习中的问题总结
- C++的顶层const和底层const的理解
- Java设计模式透析之 —— 单例(Singleton)
- 贝叶斯决策理论