博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
13.数据库连接池
阅读量:7053 次
发布时间:2019-06-28

本文共 1772 字,大约阅读时间需要 5 分钟。

/*使用数据库连接池优化程序性能*/ 

一次性从数据库中拿出一定数量的连接,放到一个池子中,每次程序要拿连接的时候,从这个池子里面去拿,用完了,也是放到这个池子里,

避免频繁的从数据库中去存取连接

 

编写自己的数据库连接池

  1.实现DataSource接口 ,DataSource接口中定义了两个重载的getConnection() 方法

  2.在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中

   实现getConnection()方法,让getConnection()方法每次调用时,从LinkedList中取一个connection (remove方法) 返回给用户

  3.当用户使用完connection,调用connection.close() 方法时,connection对象应保证自己返回到LinkedList中,而不要把connection 还给数据库

  针对 “返回到LinkedList中,而不要把connection 还给数据库” 这种需要增强某个方法,有三种方式实现

    1.编写一个子类(继承Connection) 覆盖close方法 (这里不可以,因为父类的其他信息,子类并不拥有)

    2.写一个Connection包装类,增强close方法 (包装设计模式)

    3.用动态代理,返回一个代理对象出去,拦截close方法的调用,对close方法进行增强

    (不是clsoe方法,都调用invoke方法(让其调用connection自身的方法),是close方法的话,手动增强)

/*用包装设计模式对某个对象进行增强*/

  1.写一个类,实现与被增强对象(mysql的connection)接口

  2.定义一个变量,指向被增强对象

  3.定义一个构造方法,接收被增强对象

  4.覆盖想增强的方法

  5.对于不想增强的方法,直接调用被增强对象的方法

/*加入dbcp链接池*/

  1.导入jar包

  2.在类目录下加入dbcp的配置文件

  3.在jdbcUtils静态代码块中创建池

/*C3P0数据库连接池*/

  1.导入jar包

  2.新建c3p0Test.java单元测试类

  3.打开c3p0的doc帮助文档

  4.选择QuickStart快速开始

  5.拷贝里边的实例代码

  6.修改各个参数

 

采用配置文件配置数据源

  1.打开帮助文档

  2.找到XML文件示例

  3.在工程中新建c3p0-config.xml文件

  4.拷贝XML示例文件,修改参数 ( <property></property> )

  private static ComboPooledDataSource ds = null;

  static {

    try {

      ds = new ComboPooledDataSource("...");(如果括号为空,没有指定的话,则采用默认) 

    }

  }

 

/*配置Tomcat数据源(实际上是DBCP)*/

  1.在Tomcat中加入数据库驱动软件(放在web工程中的lib 中没有用,需要放在Tomcat的lib目录下)

  2.配置context(可以在很多地方,可以修改tomcat的service.xml文件,也可以在web工程中)

  META-INF目录下,新建一个XML文件,拷贝Tomcat帮助文档中的示例代码

  3.使用JNDI获取连接对象

  Context initCtx = new InitialContext(); //初始化JNDI

  Context envCtx = (Context) initCtx.lookup("java:comp/env"); //得到JNDI容器

  DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); //从容器中检索连接池

  Connection conn = ds.getConnection();

转载于:https://www.cnblogs.com/xuzekun/p/7359459.html

你可能感兴趣的文章
WebService 的Description 属性说明(转)
查看>>
select下拉框可以直接取list里的内容 不用非得转map (不得不承认我是个ZZ,这么简单的问题才反应过来,--^--)...
查看>>
IOS UITableView下拉刷新
查看>>
高性能MySQL(第三版)
查看>>
微信小程序项目实践 项目范围及开发计划
查看>>
js 将json字符串转换为json对象的方法解析
查看>>
1.hive数据库调优之路
查看>>
BZOJ-1087: [SCOI2005]互不侵犯King (状压DP)
查看>>
AVS SampleApp
查看>>
Qt图形视图框架公开课资料
查看>>
C++容器(五):set类型
查看>>
重新绘制TabControl的Tabpage标签,添加图片及关闭按钮
查看>>
C#线程调用带参数的方法
查看>>
live555 编译
查看>>
MTU 检测和设置
查看>>
树莓派新版-入门配置 带配置选项翻译
查看>>
ssl问题
查看>>
Css布局系列——圣杯布局
查看>>
BaseAdapter教程(1) 最简单地使用BaseAdapter
查看>>
python包管理
查看>>