这是我的情况。我有一个名为somethingDao的类,它包含查询表的所有逻辑。
然后,我还有一些事情,它是一个Jersey API资源,但也是一个Singleton,并通过Spring实例化一个somethingDao对象(即,我正在将数据源注入到某些东西中)。
然后,我有一个Jersey API businessLogicResource:
somethingDaoResource.getInstance()。getsomethingDao()获取了somethingDao对象,然后我将触发多个查询。
我的问题是,这被认为是一个好的设计吗?我主要担心的是每次有人向我的businessLogicResource发送HTTP请求时,如果somethingDaoResource不是Singleton(或静态?),那么会创建somethingDao的新实例,并打开一个新连接,这需要一个什么时候做。
任何建议都非常受欢迎。
PS - 我还有一个c3p0连接池。
答案 0 :(得分:4)
最常见的做法是将DAO对象作为无状态单例。他们不是打开和关闭连接,而是从池中借一个,然后在完成后返回它。您可以限制池中的最大连接数。
在Web应用程序中使用statefull和singleton通常是一个坏主意。它可能会导致各种读/写冲突或线程锁定。这种方法还杀死了在多个服务器上分发应用程序的任何可能性,这破坏了REST架构约束之一。