2009-10-10 52 views
4

僅查看Web上的連接池示例,它們都以每個小服務程序爲基礎實現連接池。所以每個servlet都有自己的數據庫連接池。我的問題是,爲什麼更喜歡像db連接的全局池?由於一個全局池似乎比每個servlet池更高效......Java小服務程序和數據庫連接池

另外,因爲我正在考慮實現這樣一個池。有沒有辦法讓一個類在servlets之前初始化(我使用jetty btw)?我只是開始servlet開發,但對於配置等其他方面也很有用。否則,我只打算使用某種類似單例模​​式..

回答

7

1)我會說標準的做法是建立一個連接池作爲上下文描述符中的JNDI資源,其將而不是是每個servlet要做的事情。

2)您需要實現並聲明ServletContextListener

0

每個servlet有一個連接池的一個優點是,如果其中一個servlet行爲不當並使用其所有可用連接,則其他servlet仍將具有連接可以在他們獨立的游泳池中使用。這增加了您的應用程序的穩定性

+0

錯誤的行爲會造成傷害!如果您的應用程序執行單線程(servlet),您將從連接池獲得什麼好處。 – 2009-10-10 15:51:19

+2

如果應用程序只有一個線程,那麼在執行數據庫連接池時沒有意義。我不確定你在問什麼。 – Kolibri 2009-10-10 16:03:11

2

我的問題是,爲什麼更喜歡全局數據庫連接池?

這不是!所有的servlet應該共享池中的連接!

此外,因爲我正在考慮實施這樣的游泳池。

已經有方法(Spring IoC)注入容器管理的池連接。

。有沒有辦法讓一個類在servlets之前初始化(我使用jetty btw)?

IoC容器可以引導每個資源和servlet!

您可以通過註冊一個Spring dispatcherServlet和一個包含映射和servlet作爲bean定義的xml來彈出連線servlet!

使用下面的定義,如果你只是想注入的連接,並使該servlet的其餘部分,因爲它是:

<bean name="simpleServletHandlerAdapter" 
class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" /> 


<bean name="simpleServletPostProcessor" 
class="org.springframework.web.servlet.handler.SimpleServletPostProcessor" /> 
3

說實話,我真的不知道你在說什麼。也許你可以提供你看過的樣品。

對我來說,一個「真正的」連接池應該是完全Servlet不可知的,並且在每個Servlet的基礎上使用連接池是一個更多的使用細節(和一個錯誤的IMO)。只需查看DBCPc3p0就可以在「容器外」上下文中使用的連接池的很好示例。還需要注意的是,大多數(如果不是全部的話)容器實際上都提供了自己的連接池實現(有時基於前面提到的示例),並且我沒有看到沒有任何理由不使用它們。使用它們的標準方法是獲得用JDNI命名服務註冊的DataSource。今天,DataSouce大部分時間都是通過IoC注入的。在過去,經常使用Service Locator模式。

在Jetty的情況下,請查看文檔中的DataSource Examples

+0

++注意更多的話 – 2009-10-10 16:45:54