簡體   English   中英

Java servlet和數據庫連接池

[英]Java servlets and database connection pooling

只是查看Web上連接池的示例,它們都基於每個servlet實現連接池。 因此每個servlet都有自己的數據庫連接池。 我的問題是,為什么這比全局數據庫連接池更可取? 由於全局池似乎比每個servlet池更有效。

此外,因為我正在考慮實施這樣的池。 有沒有辦法在servlet之前初始化一個類(我正在使用jetty btw)? 我剛剛開始進行servlet開發,但這對於其他類似於配置的東西似乎也很有用。 否則我只是會使用某種類似單身的模式..

1)我會說標准做法是在上下文描述符中將連接池設置為JNDI資源,這不是每個servlet要做的事情。

2)您將要實現並聲明ServletContextListener

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

對我來說,一個“真正的”連接池應該完全與Servlet無關,並且在每個Servlet的基礎上使用連接池是一個更多的使用細節(和一個壞的IMO)。 只需查看DBCPc3p0 ,即可在“容器外”上下文中使用連接池的良好示例。

另請注意,大多數(如果不是全部)容器實際上提供了自己的連接池實現(有時基於前面提到的示例),我認為沒有任何充分的理由不使用它們。 使用它們的標准方法是使用JDNI命名服務注冊DataSource 今天, DataSouce大部分時間是通過IoC注入的。 在過去,經常使用服務定位器模式。

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

我的問題是,為什么這比全局數據庫連接池更可取?

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

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

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

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

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

您可以通過將Spring dispatcherServlet和包含映射和servlet的xml注冊為bean定義來彈出連接servlet!

如果您只想注入連接並保留servlet的其余部分,請使用以下定義:

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


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

Web容器使用JNDI提供ConnectionFactory(或類似)非常頻繁,JNDI使用連接池,但配置它的方式不是標准化的。

有關如何使用Jetty,請參閱http://docs.codehaus.org/display/JETTY/DataSource+Examples

每個servlet具有連接池的一個優點是,如果其中一個servlet行為不當並使用其所有可用連接,則其他servlet仍將在其單獨的池中提供連接。 這可以提高應用程序的穩定性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM