【问题标题】:Is a singleton REST database resource a good idea?单例 REST 数据库资源是个好主意吗?
【发布时间】:2011-11-03 01:28:44
【问题描述】:

这是我的情况。我有一个名为 somethingDao 的类,其中包含我查询表的所有逻辑。

然后,我还有 somethingDaoResource,它是一个 Jersey API 资源,也是一个 Singleton,并且正在通过 Spring 实例化一个 somethingDao 对象(即,我将一个数据源注入到 somethingDao 中)。

然后,我有一个 Jersey API businessLogicResource 可以:

somethingDaoResource.getInstance().getsomethingDao() 获取 somethingDao 对象,然后我会在该对象上触发多个查询。

我的问题是,这被认为是一个好的设计吗?我主要担心的是,每次有人向我的 businessLogicResource 发送 HTTP 请求时,如果 somethingDaoResource 不是单例(或静态?),那么这将创建 somethingDao 的新实例,并打开一个新连接,这需要还有时间做。

欢迎提出任何建议。

PS - 我也有一个 c3p0 连接池。

【问题讨论】:

  • 看起来不错,但我不确定我是否理解您在做什么。也许添加到您的问题中的一些代码 sn-ps 会有所帮助。

标签: spring rest singleton jersey dao


【解决方案1】:

最常见的做法是将 DAO 对象作为无状态单例。他们不会打开和关闭连接,而是从池中借用一个连接,然后在完成后返回它。您可以限制池中的最大连接数。

在 Web 应用程序中包含有状态的东西和单例通常是个坏主意。它可能会导致各种读/写冲突或线程锁定。这种方法还消除了将应用程序分布在多个服务器上的任何可能性,这打破了 REST 架构约束之一。

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 2016-02-24
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2019-01-05
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多