单例REST数据库资源是个好主意吗?

时间:2011-08-24 18:15:10

标签: spring rest singleton jersey dao

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

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

然后,我有一个Jersey API businessLogicResource:

somethingDaoResource.getInstance()。getsomethingDao()获取了somethingDao对象,然后我将触发多个查询。

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

任何建议都非常受欢迎。

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

1 个答案:

答案 0 :(得分:4)

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

在Web应用程序中使用statefull和singleton通常是一个坏主意。它可能会导致各种读/写冲突或线程锁定。这种方法还杀死了在多个服务器上分发应用程序的任何可能性,这破坏了REST架构约束之一。