日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SpringMVC框架的高級配置(下)

上文介紹Spring MVC框架配置時遇到的問題,以下是解決方案。

站在用戶的角度思考問題,與客戶深入溝通,找到尼開遠網(wǎng)站設計與尼開遠網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋尼開遠地區(qū)。

解決方案

同步Bean屬性

這個問題的一種可行的解決方案是將所有特定于主機的參數(shù)都放到普通的Java屬性文件中,使用Spring的PropertyPlaceHolderConfigurer類,將這些參數(shù)寫入Bean屬性中。

使用這一解決方案,我們可以生成如下的屬性文件(/Web-INF/JDBC.properties):

  1. jdbc.driver=org.postgresql.Driver  
  2. jdbcjdbc.url=jdbc:postgresql://localhost/test  
  3. jdbc.user=postgres 
  4. jdbc.password=

我們的Bean配置如下:

  1.  id="propertyConfigurer" 
  2. class="org.springFramework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  3.      name="location"> 
  4.        /WEB-INF/jdbc.properties 
  5.      
  6.  
  7.  id="dataSource" 
  8. class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
  9.      name="driverClassName"> 
  10.          ${jdbc.driver} 
  11.      
  12.      name="url"> 
  13.          ${jdbc.url} 
  14.      
  15.      name="username"> 
  16.          ${jdbc.user} 
  17.      
  18.      name="password"> 
  19.          ${jdbc.password} 
  20.      

如上所述,我們定義了一個PropertyPlaceholderConfigurer類的實例,并將其位置屬性設置為我們的屬性文件。該類被實現(xiàn)為Bean工廠的后處理器,并將使用定義在文件中的屬性來代替所有的占位符(${...}value)。

利用這種技術,我們可以從applicationContext.XML中移除所有特定于主機的配置屬性。通過這種方式,我們可以自由地為該文件添加新的Bean,而不必擔心特定于主機屬性的同步性。這樣可以簡化生產(chǎn)部署和維護。

同步性連接

上面的技術解決了***個問題,可是如果您計劃修改不同應用程序部署之間的Bean連接,這一技術便不很適合。針對這一問題的一個解決方案便是額外創(chuàng)建一個名為applicationContext-[hostname].xml 的XML定義文件。其中[hostname]是部署應用程序的主機的名稱。例如,在本地的機器上,這個文件通常名為 applicationContext-localhost.xml,而在部署時,它可能更名為applicationContext- somehost.com.xml。

可以猜測,這一文件必須包括特定于某一主機的所有配置Bean。在本文中,我們將假設dataSource bean定義將位于這類文件中,而不是通用的applicationContext.xml定義。當然,這種機制與前者并非沖突,但是為了更加簡單明了,我們將只關注這種方法。

既然我們已經(jīng)有了特定的配置,下面我們就來討論一下如何將其整合到整個Spring MVC框架配置概念中。要達到這一目的,可以有許多方法,我們將詳細地一一說明。但首先,我們應該注意到,由于有些Bean可能位于獨立的配置文件中,因此在 applicationContext.xml中,所有對它們的局部引用都必須更換成全局名稱。

例如,如下引用:

  1.  name="someProperty"> 
  2.     local="someBean"/> 

應更改為:

  1.  name="someProperty">  
  2.  bean="someBean"/> 

在這之后,我們有很多可以添加額外的資源以用于配置的方式。其中最明顯的就是使用標簽將這一額外資源包含在 applicationContext.xml配置文件中。使用時,要將該標簽放在applicationContext.xml文件開頭。例如:

  1.  resource="applicationContext-somehost.com.xml"/>

現(xiàn)在,在獨立的XML定義文件和普通的應用程序上下文定義文件中的所有通用Bean定義都有了特定于主機的連接。由于大多數(shù)的Bean都不是特定于主機的,因此我們可以像處理Web應用程序中的其他資源一樣自由地處理applicationContext.xml文件,并可以通過合適的版本控制系統(tǒng)與其進行同步。

但是,上述方法也有一定的弊端。如果您想保留不同XML文件的不同配置,就仍然必須擔心applicationContext.xml的同步性,因為資源的名稱必須根據(jù)不同服務器進行更改。雖然與原有的解決方案相比有了很大提高,只需更改文件名,但是這還是需要開發(fā)人員的手動協(xié)助。

由于與applicationContext.xml相比,主機配置不需如此頻繁地進行更改,因此下一步便是將主機配置移動到web.xml文件中(如果可能的話)。幸運的是,我們有一個可用的解決方案??匆幌孪旅骊P于web.xml配置的片斷:

  1.     
  2.   org.springFramework.web.context.ContextLoaderListener    
  3.     
  4.     
  5.     
  6. contextConfigLocation  
  7.     
  8.   /WEB-INF/applicationContext.xml /WEB-INF/                                                        applicationContext-somehost.com.xml    
  9.     

正如您所看到的,除了web.xml文件中常有的ContextLoaderListener之外,我們還添加了 contextConfigLocation上下文參數(shù)配置。這一參數(shù)用于指示框架查找這些配置文件的位置。如果這一參數(shù)被省略,則Spring就只能到 applicationContext.xml中查找。這里我們也定義了特定于主機的配置文件來使用。

利用這種方法,我們將所有特定于主機的配置從applicationContext.xml文件中移除,這樣便減輕了其在不同應用程序部署中的同步性。

如果這種方法成為您的新習慣,您還可以使其更加靈活。通過遵守下列指令,也可以將特定于主機的配置從web.xml文件中移除。

為此,需要創(chuàng)建特定于我們的應用程序上下文的類:

  1. package net.nighttale.spring.util;  
  2. import Java.net.InetAddress;  
  3. import org.springframework.web.context.support.XmlWebApplicationContext;  
  4. public class PerHostXmlWebApplicationContext  
  5. extends XmlWebApplicationContext ...{  
  6.     protected String[] getDefaultConfigLocations() ...{  
  7.             String hostname = "localhost";  
  8.             try ...{  
  9.                 hostname = InetAddress.getLocalHost().getHostName();  
  10.             } catch (Exception e) ...{  
  11.             }  
  12.             String perHostConfiguration = DEFAULT_CONFIG_LOCATION_PREFIX 
  13.                  + "applicationContext-"  
  14.                  + hostname  
  15.                  + DEFAULT_CONFIG_LOCATION_SUFFIX  
  16.                  ;  
  17.             logger.debug(  
  18.                  "Adding per host configuration file: "  
  19.                  + perHostConfiguration  
  20.                  );  
  21.             if (getNamespace() != null) ...{  
  22.                     return new String[] ...{  
  23.               DEFAULT_CONFIG_LOCATION_PREFIX  
  24.                 + getNamespace()  
  25.                 + DEFAULT_CONFIG_LOCATION_SUFFIX  
  26.              , perHostConfiguration};  
  27.             }  
  28.             else ...{  
  29.                     return new String[] ...{  
  30.              DEFAULT_CONFIG_LOCATION  
  31.               , perHostConfiguration};  
  32.             }  
  33.     }  
  34. }

這個類拓展了Spring中常被作為默認值使用的XmlWebApplicationContext。 XmlWebApplicationContext類將Web應用程序的配置從XML定義文件中復制過來。默認情況下,它可以配置來自 applicationContext.xml和[Servlet-name]-servlet.xml文件中的應用程序。這個類執(zhí)行的惟一一項額外任務便是獲取它所在的主機名稱,并將applicationContext-[hostname].xml文件添加到配置文件列表中。

為了使用這個類,我們需要對其進行編譯,將其包含在類途徑中,并指示Spring框架使用它。前兩步非常簡單,我們就不在此贅述。我們可以指示Sping通過contextClass上下文參數(shù)來使用它。除了web.xml文件中的原有配置,我們還可以添加下列內(nèi)容:

  1.  
  2.   contextClass 
  3.     net.nighttale.spring.util.PerHostXmlWebApplicationContext  
  4.    

如果我們使用這一配置片斷,將會有三個文件被用于初始化這個框架:[servlet-name]-servlet.xml、applicationContext-[hostname].xml以及applicationContext.xml。

正如您所看到的,applicationContext.xml和web.xml文件已經(jīng)完全擺脫了任何特定的配置細節(jié),而且您也不必擔心會在更新應用程序時破壞配置。

但是,這種方法有一個不足之處。因為,不論是否會使用,都需要在應用程序部署中有第三個配置文件。在這種情況下,便不需要特定于主機的配置。例如:

  1.  version="1.0" encoding="UTF-8"?> 
  2. > 
  3.  

***,需要知道應用程序上下文類需要查找的特定主機名。檢查主機名稱的最簡單的方法是在機器上運行下列代碼:

  1. System.out.println(InetAddress.getLocalHost().getHostName());

可以將其作為Java代碼執(zhí)行,也可在喜歡使用的腳本語言(如BeanShell或Groovy)中作為一個具有Java風格語法的腳本執(zhí)行。在獲取了主機的名稱之后,應該創(chuàng)建一個默認的/WEB-INF/applicationContext-[hostname].xml空文件夾(如我們上面所定義的),然后便可以開始了。

結束語

在本文中,我們提供了一系列的配置技巧,讓您在使用Spring MVC框架完成日常工作的時候更加輕松。如果您希望知道如何維護各種Web應用程序部署,可以試著找出最適合您的開發(fā)過程的解決方案。您的生活會更為輕松。


本文標題:SpringMVC框架的高級配置(下)
轉載來源:http://www.5511xx.com/article/cosijpo.html