日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring集成jndi_Spring应用程序与JNDI连接池的集成测试

發布時間:2023/12/3 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring集成jndi_Spring应用程序与JNDI连接池的集成测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring集成jndi

我們都知道,無論何時連接到數據庫,都需要使用連接池。 所有使用JDBC 4類的現代驅動程序都支持它。 在本文中,我們將概述Spring應用程序中的連接池,以及如何在非JEE環境(例如測試)中處理相同的上下文。

在Spring,大多數連接數據庫的示例都是使用DriverManagerDataSource完成的。如果您沒有正確閱讀文檔,那么您將錯過非常重要的一點。


注意: 此類不是實際的連接池; 它實際上并不合并連接。 它只是對成熟的連接池的簡單替代,實現了相同的標準接口,但是在每個呼叫上都創建了新的Connections。

對于J2EE容器外部的測試或獨立環境很有用,可以作為相應ApplicationContext中的DataSource bean,也可以與簡單的JNDI環境結合使用。 假定使用池的Connection.close()調用將簡單地關閉Connection,因此任何可識別DataSource的持久性代碼都應起作用。

是的,默認情況下,spring應用程序不使用池連接。 有兩種方法可以實現連接池。 取決于誰在管理池。 如果您在JEE環境中運行,則最好使用容器。 在非JEE設置中,有一些庫可以幫助應用程序管理連接池。 讓我們在下面詳細討論它們。

1.服務器(容器)管理的連接池(使用JNDI)

當應用程序連接到數據庫服務器時,建立物理實際連接所花費的時間遠遠超過了腳本的執行。 連接池是數據庫供應商率先采用的一種技術,它允許多個客戶端共享一組緩存的連接對象,這些對象提供對數據庫資源的訪問。 JavaWorld文章對此進行了很好的概述。

在J2EE容器中,建議使用容器提供的JNDI數據源。 這樣的DataSource可以通過JndiObjectFactoryBean在Spring ApplicationContext中作為DataSource bean公開,以實現與此類之類的本地DataSource bean之間的無縫切換。

以下文章幫助我在JBoss AS中設置數據源。

  • DebaJava發布
  • JBoss安裝指南
  • JBoss維基
  • 下一步是使用服務器從應用程序創建的這些連接。 如文檔中所述,您可以為此使用JndiObjectFactoryBean 。 如下所示

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName" value="java:/my-ds"/> </bean>

    如果要使用springs“ SpringJUnit4ClassRunner”編寫任何測試,則將無法加載上下文,因為JNDI資源將不可用。

    對于測試,您可以通過Spring的SimpleNamingContextBuilder設置模擬JNDI環境,或者將Bean定義切換到本地DataSource(因此更簡單)。

    當我在尋找一個很好的解決方案(我不想為測試提供單獨的上下文)時,這個SO答案對我有所幫助。 它很好地利用了Javadoc中給出的各種技巧。 上述解決方案的問題是重復創建JNDI連接的代碼。 我已經使用自定義的運行器SpringWithJNDIRunner解決了它。 此類將JNDI功能添加到SpringJUnit4ClassRunner。 它從類路徑中的“ test-datasource.xml”文件中讀取數據源,并將其綁定到名稱為“ java:/ my-ds”的JNDI資源。 執行此代碼后,JNDI資源可用于彈簧容器使用。

    import javax.naming.NamingException;import org.junit.runners.model.InitializationError; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.mock.jndi.SimpleNamingContextBuilder; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** This class adds the JNDI capabilities to the SpringJUnit4ClassRunner.* @author mkadicha* */ public class SpringWithJNDIRunner extends SpringJUnit4ClassRunner {public static boolean isJNDIactive;/*** JNDI is activated with this constructor.* * @param klass* @throws InitializationError* @throws NamingException* @throws IllegalStateException*/public SpringWithJNDIRunner(Class<?> klass) throws InitializationError,IllegalStateException, NamingException {super(klass);synchronized (SpringWithJNDIRunner.class) {if (!isJNDIactive) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("test-datasource.xml");SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();builder.bind("java:/my-ds",applicationContext.getBean("dataSource"));builder.activate();isJNDIactive = true;}}} }<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="" /><property name="url" value="" /><property name="username" value="" /><property name="password" value="" /></bean></beans>

    要使用此運行程序,您只需在測試中使用注釋@RunWith(SpringWithJNDIRunner.class) 。 此類擴展了SpringJUnit4ClassRunner,因為@RunWith批注中只能有一個類。 一個測試周期僅創建一次JNDI。 此類為問題提供了一種干凈的解決方案。

    2.應用程序管理的連接池

    如果您需要J2EE容器之外的“實際”連接池,請考慮使用Apache的Jakarta Commons DBCP或C3P0。 Commons DBCP的BasicDataSource和C3P0的ComboPooledDataSource是完整的連接池bean,支持與此類相同的基本屬性以及特定的設置(例如最小/最大池大小等)。

    下面的用戶指南可以幫助您進行配置。

  • Spring文件
  • C3P0用戶指南
  • DBCP用戶指南
  • 以下文章介紹了配置連接池的一般準則和最佳實踐。

  • 關于Spring JDBC連接池的問題
  • MS SQL Server 2008中的連接池最大大小
  • 如何確定最大連接數
  • 監視SQL Server 2008中的活動連接數
  • 翻譯自: https://www.javacodegeeks.com/2014/03/integration-testing-for-spring-applications-with-jndi-connection-pools.html

    spring集成jndi

    總結

    以上是生活随笔為你收集整理的spring集成jndi_Spring应用程序与JNDI连接池的集成测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。