[英]Java servlets and database connection pooling
只是查看Web上連接池的示例,它們都基於每個servlet實現連接池。 因此每個servlet都有自己的數據庫連接池。 我的問題是,為什么這比全局數據庫連接池更可取? 由於全局池似乎比每個servlet池更有效。
此外,因為我正在考慮實施這樣的池。 有沒有辦法在servlet之前初始化一個類(我正在使用jetty btw)? 我剛剛開始進行servlet開發,但這對於其他類似於配置的東西似乎也很有用。 否則我只是會使用某種類似單身的模式..
1)我會說標准做法是在上下文描述符中將連接池設置為JNDI資源,這不是每個servlet要做的事情。
2)您將要實現並聲明ServletContextListener 。
說實話,我真的不知道你在說什么。 也許你可以提供你看過的樣品。
對我來說,一個“真正的”連接池應該完全與Servlet
無關,並且在每個Servlet的基礎上使用連接池是一個更多的使用細節(和一個壞的IMO)。 只需查看DBCP或c3p0 ,即可在“容器外”上下文中使用連接池的良好示例。
另請注意,大多數(如果不是全部)容器實際上提供了自己的連接池實現(有時基於前面提到的示例),我認為沒有任何充分的理由不使用它們。 使用它們的標准方法是使用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.