playframework切换连接池c3p0(转载并整理)

众所周知,playframework使用的连接池是boneCP,但是确实十分坑爹,因为连接池中对象不能正常释放,导致连接池疯狂向数据库创建连接,最后导致应用获取不到可用连接而报错。当然不是我一个人遇到这个问题,stackoverflow的老外也被坑了一大片。

那么优秀程序员的品质得到体现,github上的hadashi写了一个插件解决了我们的问题。




1. <span class="typ">This</span><span class="pln"> plugin provides an alternative to </span><span class="typ">BoneCP</span><span class="pln"> as the connection pool manager </span><span class="kwd">in</span><span class="typ">Play</span><span class="lit">2.1</span><span class="pun">.</span><span class="typ">The</span><span class="pln"> main reason </span><span class="kwd">for</span><span class="pln"> doing this is that I have seen issues with connections not being released properly by </span><span class="typ">BoneCP</span><span class="pln"> when there are low max connections available</span><span class="pun">.</span>




当然貌似有人盗版,不知道是谁抄谁,无所谓嘛,不要在乎那些细节,我参考的是如下地址:


其实按照他的步骤一步步执行就好了。

第一、在build.sbt里面引用插件源




1. <span class="pln">libraryDependencies </span><span class="pun">++=</span><span class="typ">Seq</span><span class="pun">(</span>
2. <span class="str">"jp.furyu"</span><span class="pun">%%</span><span class="str">"play-c3p0-plugin"</span><span class="pun">%</span><span class="str">"0.2.1"</span>
3. <span class="pun">)</span>

第二、创建conf/play.plugins文件,录入如下内容





1. <span class="lit">5000</span><span class="pun">:</span><span class="pln">jp</span><span class="pun">.</span><span class="pln">furyu</span><span class="pun">.</span><span class="pln">play</span><span class="pun">.</span><span class="pln">c3p0</span><span class="pun">.</span><span class="pln">C3p0Plugin</span>

第三、让原有的db插件失效,修改application.conf





1. <span class="pln">dbplugin</span><span class="pun">=</span><span class="pln">disabled</span>



第四、配置数据源




1. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">user</span><span class="pun">=</span><span class="pln">pointshub</span>
2. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">password</span><span class="pun">=</span><span class="pln">pointshub</span>
3. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">url</span><span class="pun">=</span><span class="str">"postgres://pointshub:pointshub@10.20.0.156:5432/pointshub"</span>
4. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">driver</span><span class="pun">=</span><span class="pln">org</span><span class="pun">.</span><span class="pln">postgresql</span><span class="pun">.</span><span class="typ">Driver</span>
5. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">maxPoolSize</span><span class="pun">=</span><span class="lit">200</span>
6. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">minPoolSize</span><span class="pun">=</span><span class="lit">20</span>
7. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">initialPoolSize</span><span class="pun">=</span><span class="lit">40</span>
8. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">acquireIncrement</span><span class="pun">=</span><span class="lit">5</span>
9. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">maxIdleTime</span><span class="pun">=</span><span class="lit">10m</span>
10. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">maxConnectionAge</span><span class="pun">=</span><span class="lit">1h</span>
11. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">idleConnectionTestPeriod</span><span class="pun">=</span><span class="lit">10m</span>
12. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">preferredTestQuery</span><span class="pun">=</span><span class="str">"select 1;"</span>
13. <span class="pln">db</span><span class="pun">.</span><span class="pln">default</span><span class="pun">.</span><span class="pln">checkoutTimeout</span><span class="pun">=</span><span class="lit">3s</span>

以上为转载整理,请参阅。


PS:之前写东西上来就“废话不说,直接上码”,今天废话几句就是想弘扬一下像hadashi这样的优秀程序员的品质。

分享到