连接池---小心得


70.  现在来看一下连接池的概念,我们一个商业性的项目肯定要使用连接池的,他有什么作用,我们访问数据库的时候获取连接的时候是非常慢的,使用连接池的话,我先创建一些连接全放在连接池里面。事先放好,以后你要用的话,就直接拿。就省去了创建的时间。


71.  如果你使用了连接池的话,比如说你拿到连接调用方法添加了用户,一调用完不是把连接池关了,而是把连接池送回去。虽然也是conn.close()但是实际上没有关闭,而是把flag=true改成flag=false这么一改。现在不就是又可以用了嘛。


72.  连接池貌是这样的,比如下面有三个连接
conn1  张三进来了,拿这个连接,把这个连接拿走了,你这相当于有一个标记一样,flag=true,true表示被使用。
conn2  假设李四把这个拿走了,也是flag=true;
conn3  flag=false表示这个连接处于空闲状态。


73.  假设上面三个都被用了呢?这还得看你这个池的限制,假设我现在最多能放10个,那么现在第四个用户进来的话,那么 我马上创建一个conn.现在再来用户就一直往 上加,就再创一个直到第10个,假设第11个进来了,就等着呗,如果第11个一直等一直等,他就超时错误了,就像那个session一样。


74.  他可以设置一个最大的上限和一个最小的下限。
最小的下限:即一启动的时候最小创建多少个连接。

75.  其实你可以自己写一个连接池,你自己写的意义不大,这些成熟的东西有的是,我们以前也写过,很久以前了,01年,王勇说他们的一个同事写的,因为那时候刚开始接触java,也不太懂,他01年接触java的,


76.  他说他的同事写的有问题,用着用着2小时机器就得重启一下。这个问题其实很容易发生。


77.  特别是多个人做的时候,如果管理不好,什么事啊,连接没了,假设我现在给这个连接池30个连接,正常情况下30个连接已经很大了。你想30个人同时占用,你这个访问量得多大啊,同时 占30个,第31个来的时候,等的时候没有可能会出问题,


78.  我们那时出了什么问题呢?他这个连接池写得有毛病,也不是说连接池写得有毛病,就是说成员做开发,写的代码有问题,他那个偶尔就没有释放这个连接,你看啊,假设张三来使用conn1,张三操作了某个功能,这个功能写得有问题啊,他用完这连接就没释放,那这个连接就一直占着啊,其他人操作可能都释放了,偶尔张三又操作一下,又没有释放,那他又占一个,直到他把30个全占了,占满之后,第31个人再来,没了,没了机器就得重启啊,重启的话,这连接不就释放了吗?再重新来,这系统肯定不行是吧,这就属于内存泄漏了,


79.  所以说在大的项目里,这种资源都是我去释放的,就很容易出现问题,出现之后很难找,


80.  项目那么 大的话,你知道是点到什么地方出了什么问题吗?他是偶尔就不行了,偶尔就不行了,以前他在工作的时候也出现 过这种问题。


81.  我们用连接池主要用哪个啊,就用tomcat集成的那个dbcp  ,连接池又用别的c3p0,以前我们还用过poolman    关于这个dbcp我们也说过,在说这个上传的时候。


82.  这个dbcp和oracle,mysql这些没有任何关系,他就负责创建连接,管理连接。


83.  在tomcat的common目录下,有一个dbcp.jar的包,位于common这个目录下,我们刚讲这个类加载机制,那个oracle  driver放在Web App1下面,这个能产生连接,这个连接你得放到dbcp这个池里,

Common    连接池放在这
Shared
Web App1   oracle jdbc  放这
你现在产生的连接能放到上面的连接池里面去吗?放不了,跟类的加载机制有关,所以你要配置连接池,你必须把Web App1下面的相关驱动放到Common里面,让他们使用同一个加载器加载。


84.  他是这样说的,必须把Web App1下面的ojdbc驱动放到common里面,我好像没有这样做啊,


85.  关于这个连接池,怎么来配置呢?你其实可以通过修改tomcat的配置文件来配,但是我们来接触一下,tomcat的配置页面,用他的管理页面来配,他说这个管理页面需要重新下载,他本身不带,

猜你喜欢

转载自xiechao240.iteye.com/blog/739907