【问题标题】:How to automatically close mysql connection in ServiceStack ormlite如何在ServiceStack ormlite中自动关闭mysql连接
【发布时间】:2016-05-23 12:39:16
【问题描述】:

当 API 请求返回数据时,我使用 ServiceStack OrmLite 访问 AWS MySQL。有很多 MySql 连接处于睡眠状态。

结束请求时如何关闭这些数据库连接?

public object Get(GetCustomer request) { return Db.SingleById<Customer>(request.Id); }

我在 IIS 中托管 API。

ServiceStack 和 ServiceStack.OrmLite 是 4.0.56

MySQL来自AWS RDS,数据库引擎版本为5.6.21

MySQL.Data 是 6.9.8

【问题讨论】:

  • 您能否提供显示您如何使用 OrmLite 的代码?例如,来自Service 通过Db 属性或通过IDbConnectionFactory 等。
  • 我使用了服务中的 Db 属性。像这样:public object Get(GetCustomer request) { return Db.SingleById&lt;Customer&gt;(request.Id); } 。我在IIS 中托管了 API。
  • 您能否提供您正在使用的ServiceStack 版本以及您正在连接的MySql 版本?更新问题可能是最简单的方法。
  • 数据库连接应该已经在每个请求结束时被处理掉了。你的连接字符串是什么样的(没有密码),你可能启用了连接池或其他东西。
  • 我知道在我的 MSSQL 连接中,我有连接池,并且由于每个新请求都保留了一个连接,并且池已满,所以我一直在连接失败。虽然 ServiceStack 中的Service.Dispose 基本实现确实检查并处理了Db 连接,但我无法保证何时会发生(GC 收集)。我最终在我的 AppHost 中实现了OnPostExecuteServiceFilter,以提前强制关闭数据库连接并防止数据库连接错误。

标签: mysql connection servicestack


【解决方案1】:

我找到了原因。我注册了一些没有范围的接口。正确的方法是:

container.RegisterAutoWiredType(x, ReuseScope.Request)

默认重用范围是ReuseScope.None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2015-11-29
    相关资源
    最近更新 更多