使用TIdHTTPServer时如何防止“MySql消失”

时间:2014-10-06 13:33:32

标签: mysql delphi indy

我使用Delphi和Indy TIdHttpServer组件编写了一个Web服务器。我正在管理一个到MySql数据库的TAdoConnection连接池。当请求进来时,我查询我的池以获取可用的数据库连接。如果一个不可用,则创建一个新的TAdoConnection并将其添加到池中。

当连接变得“陈旧”时出现问题(即,它已经在很长一段时间内没有使用)。我认为在这个例子中查询导致“MySql已经消失”错误。

有没有人有办法解决这个问题?或者我可以通过以下方式之一自行管理:

  1. 编写一个定期“刷新”所有连接的线程。
  2. 跟踪最后一个活动查询,如果过早使用该连接传递,则将其释放。

1 个答案:

答案 0 :(得分:1)

两个建议:

  • 为每个池连接存储最后使用的' 时间戳,如果请求连接,请检查连接是否太旧 - 在这种情况下,请创建一个新的

  • 添加validateObject()方法,该方法发出无操作SQL查询以检测连接是否仍然健康

  • 后台线程定期清理池:删除空闲连接可以在高峰使用后将池大小减少到最小值

有关建议,请参阅有关Apache Commons Pool Framework的文章:http://www.javaworld.com/article/2071834/build-ci-sdlc/pool-resources-using-apache-s-commons-pool-framework.html