精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring MVC框架的高級配置(下)

開發(fā) 后端
本文介紹Spring MVC框架的高級配置,包括介紹配置時遇到的問題以及問題解決方法。

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


解決方案

同步Bean屬性

這個問題的一種可行的解決方案是將所有特定于主機的參數都放到普通的Java屬性文件中,使用Spring的PropertyPlaceHolderConfigurer類,將這些參數寫入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. <bean id="propertyConfigurer" 
  2. class="org.springFramework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  3.     <property name="location"> 
  4.        <value>/WEB-INF/jdbc.properties</value> 
  5.     </property> 
  6. </bean> 
  7. <bean id="dataSource" 
  8. class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
  9.     <property name="driverClassName"> 
  10.          <value>${jdbc.driver}</value> 
  11.     </property> 
  12.     <property name="url"> 
  13.          <value>${jdbc.url}</value> 
  14.     </property> 
  15.     <property name="username"> 
  16.          <value>${jdbc.user}</value> 
  17.     </property> 
  18.     <property name="password"> 
  19.          <value>${jdbc.password}</value> 
  20.     </property> 
  21. </bean> 

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

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

同步性連接

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

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

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

例如,如下引用:

  1. <property name="someProperty"> 
  2.    <ref local="someBean"/> 
  3. </property> 

應更改為:

  1. <property name="someProperty">  
  2. <ref bean="someBean"/> 
  3. </property> 

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

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

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

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

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

  1. <listener>    
  2. <listener-class>  org.springFramework.web.context.ContextLoaderListener    
  3. </listener-class>    
  4. </listener>    
  5. <context-param>    
  6. <param-name>contextConfigLocation  
  7. </param-name>    
  8. <param-value>  /WEB-INF/applicationContext.xml /WEB-INF/                                                        applicationContext-somehost.com.xml    
  9. </param-value>    
  10. </context-param> 

正如您所看到的,除了web.xml文件中常有的ContextLoaderListener之外,我們還添加了 contextConfigLocation上下文參數配置。這一參數用于指示框架查找這些配置文件的位置。如果這一參數被省略,則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.     }  

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

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

  1. <context-param> 
  2.   <param-name>contextClass</param-name> 
  3.   <param-value>  net.nighttale.spring.util.PerHostXmlWebApplicationContext  
  4.   </param-value> 
  5. </context-param> 

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

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

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

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"                            "http://www.springframework.org/dtd/spring-beans.dtd"> 
  3. <beans> 
  4. </beans> 

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

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

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

結束語

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

【編輯推薦】

  1. Spring Batch 2.0的新特性
  2. 簡單介紹Spring osgi
  3. Spring OSGi的整合
  4. 在Spring中配置Glassfish JPA
  5. 解決Spring2.0向spring2.5遷移的問題
責任編輯:佚名 來源: IT168
相關推薦

2009-06-19 11:28:45

2009-06-24 16:01:28

Spring MVC

2019-08-15 10:56:10

WebServletSpring mvc

2009-06-18 11:37:16

配置spring

2022-04-30 08:43:52

Spring模塊化框架

2009-01-03 14:39:04

ibmdwDojoMVC

2009-03-13 10:58:48

ASP.NetMVC框架編程

2009-06-19 17:05:08

MVC框架Struts和Spri

2022-05-30 11:17:44

Spring容器配置

2010-01-08 12:03:42

ibmdwREST

2012-10-22 16:55:48

JavaMVC

2011-02-24 15:11:00

MVC框架

2011-12-05 13:44:34

JavaSpringMVC

2013-03-21 13:56:21

JavaScriptBackBone

2009-02-02 09:08:38

MVC框架控制器CakePHP

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-02-02 09:04:52

MVC框架Java

2009-04-24 09:43:09

.NETASP.NET框架

2017-11-23 17:21:31

Yii框架IntelYii框架深度剖析

2011-03-02 13:23:42

Vsftpd配置
點贊
收藏

51CTO技術棧公眾號

26uuu色噜噜精品一区| 亚洲精品一区二区三区影院忠贞| 在线观看黄av| 精品在线一区二区三区| 欧美一级一区二区| 欧美 亚洲 视频| 五月婷婷六月香| 日本a人精品| 亚洲欧美日韩一区| 97热精品视频官网| 潘金莲一级淫片aaaaa| 欧美视频一二区| 免费国产自久久久久三四区久久| 久久久精品免费免费| 久久精品国产亚洲一区二区| 日本中文字幕网址| 波多野结衣视频免费观看| 伊人久久大香线蕉| 欧美三电影在线| 国产免费高清一区| 亚洲国产av一区二区三区| 久久国产精品亚洲人一区二区三区 | 久久艹国产精品| 免费在线超碰| 综合在线一区| 在线视频你懂得一区二区三区| 日本高清一区| 亚洲精品无码专区| 欧美精品尤物在线观看| 欧美一区二区三区四区五区| 久久这里只有精品23| 成人午夜电影在线观看| 国产a精品视频| 亚洲国产成人av在线| 色爽爽爽爽爽爽爽爽| 天堂av电影在线观看| 黄色成人在线网站| 中文字幕av一区二区三区谷原希美| 日本人妻一区二区三区| 午夜av成人| 亚洲6080在线| 成人乱人伦精品视频在线观看| 国产精品第108页| 亚洲欧美在线综合| 国产亚洲午夜高清国产拍精品 | 日本精品一区二区三区高清| 一级黄色片播放| 欧美精品久久久久久久久久| 视频一区国产精品| 欧美黄片一区二区三区| 精品视频在线一区二区在线| 亚洲国产日韩一区二区| 永久免费精品视频网站| 国产在线视频福利| 亚洲欧美网站| 久久久噜久噜久久综合| 九一在线免费观看| 免费欧美激情| 亚洲成人激情图| 色婷婷综合在线观看| 日本a一级在线免费播放| 国产人成精品一区二区三| 久久91精品国产| 中文字幕在线2021| 伊人久久大香线蕉av超碰| 亚洲一区二区欧美激情| 综合色婷婷一区二区亚洲欧美国产| 每日更新在线观看av| 91麻豆精品视频| 精品综合久久久| 日韩电影免费观看高清完整| 日韩av在线天堂| 91精品视频一区二区| 日本道色综合久久| 国产xxxxx视频| 中文字幕 在线观看| 欧美性极品xxxx娇小| 天堂8在线天堂资源bt| 欧美成人一区二区视频| 久热精品视频| 国产精品狠色婷| 涩涩视频在线观看| 极品尤物av久久免费看| 国产日韩av在线播放| 亚洲手机在线观看| 国产一二精品视频| 91在线视频精品| www.国产欧美| 91在线视频观看| 久久99精品久久久久久三级| 欧洲综合视频| 国产精品免费免费| 国产卡一卡二在线| av中文字幕在线看| 懂色av一区二区三区| 久久国产精品免费一区| 蜜桃成人在线视频| 中文字幕在线视频一区| 国风产精品一区二区| 成人免费网址| 五月婷婷激情综合| 91黄色小网站| 国产盗摄在线观看| 亚洲成人午夜影院| 能看的毛片网站| 国产一区二区在线观| 亚洲福利小视频| 国产精品美女高潮无套| 在线中文字幕亚洲| 欧美在线观看网址综合| 欧美另类videoxo高潮| 欧美三级午夜理伦三级在线观看| 亚洲美女动态图120秒| 精品伦精品一区二区三区视频密桃 | 色呦呦视频在线观看| 91亚洲永久精品| 亚洲一一在线| 日韩av资源站| 国产精品毛片无遮挡高清| 精品人妻人人做人人爽| 姬川优奈av一区二区在线电影| 欧美日韩成人综合| 中文在线观看免费视频| 最新国产精品视频| 不卡伊人av在线播放| 国产一区二区视频免费| 成人免费毛片嘿嘿连载视频| 国产在线观看精品| 国产精品区在线观看| 久久日韩粉嫩一区二区三区| 激情图片qvod| 欧美日韩五码| 亚洲成人精品av| 亚洲xxxx3d动漫| 日韩黄色免费网站| 国产一区二区三区av在线| av电影在线观看一区二区三区| 亚洲国产乱码最新视频| 亚洲怡红院在线| japanese国产精品| 91成人免费观看网站| 精品人妻伦一二三区久久 | 亚洲一区二区在线播放| 韩国三级av在线免费观看| 一二三四社区欧美黄| 性生活免费在线观看| 亚洲小说图片| 国模精品视频一区二区三区| 国产又粗又猛又色又| 亚洲国产电影在线观看| 国产男女激情视频| 婷婷综合成人| 精品剧情在线观看| 奇米网一区二区| 久久久久久自在自线| 精品久久久三级| 国产99re66在线视频| 日韩精品一区二区在线观看| 欧美第一页在线观看| 老汉av免费一区二区三区 | 天天综合色天天综合色hd| 自拍偷拍亚洲视频| 亚洲第五色综合网| 久久免费视频99| 成人综合婷婷国产精品久久| 亚洲欧美国产一本综合首页| 免费成人美女女在线观看| 久久先锋资源| 欧洲成人一区二区| 色老太综合网| 国产亚洲精品久久| 少妇特黄一区二区三区| 九九在线高清精品视频| 91精品国产91久久久久福利| 午夜视频www| 999在线观看精品免费不卡网站| 国产精品视频免费观看| 男人的天堂在线免费视频| 在线观看视频一区二区欧美日韩| 国产视频不卡在线| 国产福利精品导航| 欧美在线观看www| 欧美肉体xxxx裸体137大胆| 国产欧美日韩中文字幕| 密臀av在线| 国产亚洲欧洲黄色| 国产成人精品免费看视频| 婷婷夜色潮精品综合在线| 男人的天堂av网| 成人在线视频一区| 国产福利一区视频| 中文精品电影| 欧美激情专区| 热三久草你在线| 中文字幕免费精品一区高清| 成 人片 黄 色 大 片| 日本精品一级二级| 久草福利资源在线观看| 国产无人区一区二区三区| 国产又粗又猛又爽又黄| 久久国产精品久久久久久电车 | 国产有码一区二区| 2020av在线| 久久久国产视频91| 欧美人体大胆444www| 欧美大胆人体bbbb| 在线亚洲欧美日韩| 精品国产91久久久久久| 国产精品免费人成网站酒店| 久久久久免费观看| 中国特级黄色大片| 国产自产v一区二区三区c| 黑森林福利视频导航| 亚洲黄色天堂| 四虎4hu永久免费入口| 精品国产99| 精品欧美日韩| 亚洲日本va中文字幕| 国产精品视频xxxx| 热色播在线视频| 久久久久久欧美| 国产成人l区| 日韩亚洲第一页| 高清在线观看av| 亚洲精品资源在线| 国产又黄又爽又色| 亚洲综合一区二区三区| 亚洲综合久久av一区二区三区| 久久精品男人的天堂| 一区二区三区免费在线观看视频| 成人综合激情网| 亚洲av午夜精品一区二区三区| 黄色资源网久久资源365| 性刺激的欧美三级视频| 日本少妇一区二区| 男女无套免费视频网站动漫| 国产精品久久久久久| 日韩欧美一区二区三区四区| 少妇精品久久久一区二区| 久久精品国产理论片免费| 盗摄系列偷拍视频精品tp| 91免费看蜜桃| 一区二区三区视频播放| av成人观看| 91久久精品无嫩草影院| 久久艹在线视频| 97在线观看免费观看高清 | 69久久99精品久久久久婷婷 | 美女视频黄免费的久久| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 性欧美暴力猛交另类hd| 日本三级免费观看| 久久精品91| 手机看片福利日韩| 久久丁香综合五月国产三级网站| 中文字幕久久av| 国产一区二区三区精品欧美日韩一区二区三区| 一区二区三区四区毛片| 国产一区二区不卡老阿姨| 男人添女人荫蒂国产| 北条麻妃国产九九精品视频| 粉嫩av懂色av蜜臀av分享| 91美女蜜桃在线| 国产激情av在线| 亚洲天堂网中文字| 91porn在线视频| 午夜精品视频一区| 免费视频网站在线观看入口| 欧美日韩另类一区| av在线亚洲天堂| 亚洲黄色www网站| 青青国产在线视频| 欧美日韩国产小视频在线观看| 99久久婷婷国产一区二区三区| 精品国产露脸精彩对白| 九色网友自拍视频手机在线| 色哟哟入口国产精品| 日本三级在线观看网站| 4388成人网| 欧美综合影院| 国内一区在线| 人人狠狠综合久久亚洲婷| 国产激情在线看| 亚洲在线电影| 日韩 国产 一区| 久久香蕉国产线看观看99| 男人的午夜天堂| 欧美日韩国产中文字幕| 中文字幕在线观看欧美| 精品对白一区国产伦| 国产乱理伦片a级在线观看| 九九九久久国产免费| 范冰冰一级做a爰片久久毛片| 成人动漫网站在线观看| 精品综合久久88少妇激情| 91黄在线观看| 最新亚洲精品| 欧美在线观看黄| 秋霞午夜av一区二区三区| 日本精品一二三区| 国产精品色眯眯| 亚洲国产成人精品激情在线| 3d动漫精品啪啪一区二区竹菊| 无码国产精品一区二区免费16| 精品国产一区二区三区久久狼黑人 | 最近免费中文字幕中文高清百度| 国产精品综合在线视频| 最近中文字幕免费视频| 亚洲国产美女搞黄色| 97超碰资源站| 亚洲天堂av在线免费观看| 成人福利影视| 91在线精品观看| 久久一区二区三区电影| 亚洲永久激情精品| 麻豆久久精品| 日本黄色免费观看| 伊人色综合久久天天人手人婷| 青草草在线视频| 欧美性xxxxx极品少妇| 日本不卡视频一区二区| 91精品国产高清久久久久久久久| 欧美日韩黄网站| 国产精品免费在线| 一区二区影视| 国产永久免费网站| 欧美激情一二三区| 久草视频一区二区| 精品视频久久久| 国产精品高颜值在线观看| 成人女人免费毛片| 一区二区电影| 日韩av影视大全| 国产精品成人一区二区艾草| 姑娘第5集在线观看免费好剧| 亚洲精品一区二区三区不| 美女的胸无遮挡在线观看| 国产在线播放一区二区| 亚洲国产黄色| 亚洲av成人片无码| 亚洲福利一二三区| 欧美一区二区黄片| 隔壁老王国产在线精品| 91成人短视频| 男女猛烈激情xx00免费视频| 成人免费视频网站在线观看| 日本三级网站在线观看| 精品国产乱码久久久久久闺蜜 | 黑人与亚洲人色ⅹvideos| 青青青国产精品一区二区| 一区二区三区韩国免费中文网站| 国产a级一级片| www精品美女久久久tv| 国产寡妇亲子伦一区二区三区四区| 亚洲欧美精品一区| 日韩精品第一| 中文字幕在线亚洲三区| 国产精品一区专区| 国产精品成人av久久| 日韩成人av在线| av影片免费在线观看| 国产欧美日韩免费| 欧美永久精品| 91视频在线免费| 在线日韩一区二区| 秋霞午夜在线观看| av在线不卡观看| 国产日韩专区| 日本黄色激情视频| 欧美一区二区性放荡片| xxx.xxx欧美| 色噜噜狠狠一区二区三区| 韩国v欧美v亚洲v日本v| 国产一级在线观看视频| 国产午夜精品理论片a级探花| 成人国产激情| 国内一区二区三区在线视频| 久久久久免费| 麻豆网址在线观看| 欧美精品一区二区在线观看| 美女日韩欧美| 99热一区二区三区| 91在线观看污| 亚洲影视一区二区| 海角国产乱辈乱精品视频| 教室别恋欧美无删减版| av在线网站免费观看| 欧美日韩国产影院| av在线free| 欧美精品一区在线| 国产一区91精品张津瑜| 69亚洲精品久久久蜜桃小说 | 一起操在线播放| 亚洲精品成人久久久| 婷婷久久免费视频| 日本精品免费在线观看| 亚洲欧美日韩电影| 国产三级电影在线观看| 99国产在线| 美国毛片一区二区|