还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
本文将为您供应关于框架的配置技巧,以帮助管理基于Spring MVC的应用程序的多个实例本配置管理主题常被学术界所忽Spring web视,但是,这对于现实的开发尤为重要本主题并不干脆关联任何web具体的技术,因此,我们将从最基本的概念起先对这个问题进行说明下面,我们将依据框架,为基于本技术开发的项目供应一Spring MVC系列的解决方案配置Spring人们常常会在一台以上的主机上配置一种应用程序例如,在Web生产中,一个网站可能只有一个实例除了此实例外,开发人员可以在用于开发的机器上配置其他的(开发)实例也可以在公司(机构)内部的本地开发服务器上维护其他应用程序装置,这将让您受益匪浅该实例的目的是使设计者可以获得有质量保证的材料,并为须要为应Web用程序供应文件资料的人供应准入大家都知道,即使是最简洁的场景,也须要安装、配置和维护三个实例而对于位于不同地理位置的团队来说,要从事这样的项目便更加困难对于任何不是特殊简洁的应用程序项目,都须要多名开发人Web员来安装项目装置和本地设置以及运行单元测试的装置等很多组织都将自己开发的产品作为应用程序我们可以在很Web多产品中发觉这种状况,例如电子商务系统、内容管理系统()以及博客发布平台等这类产品可在多个服务器中进行CMS,部署对于胜利的多用途应用程序来说,他们的开发人员必须Web都不是特定于主机的,因此我们可以像处理应用程序中的其Bean Web他资源一样自由地处理文件,并可以通过合applicationcontext.xml适的版本限制系统与其进行同步但是,上述方法也有肯定的弊端假如您想保留不同文件的不XML同配置,就仍旧必需担忧的同步性,因为资applicationcontext.xml源的名称必需依据不同服务器进行更改虽然与原有的解决方案相比有了很大提高,只需更改文件名,但是这还是须要开发人员的手动帮助由于与相比,主机配置不需如此频繁地applicationcontext.xml进行更改,因此下一步便是将主机配置移动到文件中(假如可web.xml能的话)幸运的是,我们有一个可用的解决方案看一下下面关于配置的片断web.xmllistenerlistener-classorg.springframework.web.context.ContextLoaderListe ner/listener-class/listener context-pa ramparam-namecontextConfigLocation/param-name param-value/WEB-IN F/applicationContext.xml/WEB-IN F/applicationContext-somehost.xml/param-value/context-param正如您所看到的,除了文件中常有的web.xml之夕卜,我们还添加了ContextLoaderListener上下文参数配置这一参数用于指示框架查找contextConfigLocation这些配置文件的位置假如这一参数被省略,则就只能到Spring中查找这里我们也定义了特定于主机的配置applicationcontext.xml文件来运用利用这种方法,我们将全部特定于主机的配置从文件中移除,这样便减轻了其在不同应用程序applicationcontext.xml部署中的同步性假如这种方法成为您的新习惯,您还可以使其更加敏捷通过遵守下列指令,也可以将特定于主机的配置从文件中移除web.xml为此,须要创建特定于我们的应用程序上下文的类package net.nighttale.spring.util;import java.net.InetAddress;importorg.springframework,web.context,support.Xml WebApplicationContext;public classPerHostXmlWebApplicationContextextends XmlWebApplicationContext{protected String[]getDefaultConfigLocations{String hostname=localhost;try{hostname=InetAddress.getLocalHost.getHostName;}catch Exceptione{}String perHostConfiguration=DEFAULT_CONFIG_LOCATION_PREFIX+applicationContext-+hostname+DEFAULT_CONFIG_LOCATION_SUFFIXIogger.debugAdding perhost configurationfile:+perHostConfiguration;if getNamespace!=null{return newString[]{DEFAULT_CONFIG_LOCATION_PREFIX+getNamespace4-DEFAULT_CONFIG_LOCATION_SUFFIX,perHostConfiguration};}else{return newString[]{DEFAULT_CONFIG_LOCATION,perHostConfiguration};}}}这个类拓展了中常被作为默认值运用的Spring类将XmlWebApplicationContexto XmlWebApplicationContext应用程序的配置从定义文件中复制过来默认状况下,它可以Web XML配置来自和applicationcontext.xml文件中的应用程序这个类执行的惟[sendet-name]-servlet.xml一一项额外任务便是获得它所在的主机名称,并将文件添加到配置文件列表中applicationcontext-[hostname].xml为了运用这个类,我们须要对其进行编译,将其包含在类途径中,并指示框架运用它前两步特别简洁,我们就不在此赘述我们可Spring以指示通过上下文参数来运用它除了Sping contextclassweb.xml文件中的原有配置,我们还可以添加下列内容context-paramparam-namecontextClass/param-nameparam-valuenet.nighttale.spring,util.PerHostXml WebApplicationContext/param-value/context-param假如我们运用这一配置片断,将会有三个文件被用于初始化这个框架、[servlet-name]-servlet.xml以及applicationContext-[hostname].xml applicationcontext.xmlo正如您所看到的,和文件已经applicationcontext.xml web.xml完全摆脱了任何特定的配置细微环节,而且您也不必担忧会在更新应用程序时破坏配置但是,这种方法有一个不足之处因为,不论是否会运用,都须要在应用程序部署中有第三个配置文件在这种状况下,便不须要特定于主机的配置例如xml version=
1.0encoding=UTF-8!DOCTYPE beansPUBLIC-//SPRING//DTDBEAN//EN//springframework.org/dtd/spring-beans.dtdbeansx/beans最终,须要知道应用程序上下文类须要查找的特定主机名检查主机名称的最简洁的方法是在机器上运行下列代码System.out.printlnInetAddress.getLocalHost.getHostName可以将其作为代码执行,也可在喜爱运用的脚本语言如Java或中作为一个具有风格语法的脚本执行在BeanShell GroovyJava获得了主机的名称之后,应当创建一个默认的空文件夹(如我们/WEB-INF/applicationContext-[hostname].xml上面所定义的),然后便可以起先了结束语在本文中,我们供应了一系列的配置技巧,让您在运用Spring MVC框架完成日常工作的时候更加轻松假如您希望知道如何维护各种Web应用程序部署,可以试着找出最适合您的开发过程的解决方案您的生活会更为轻松要保证他们的应用程序便于安装,并且能够与其他应用程序完备集Web成经过上述探讨之后,我们应当明白,作为本文主题的应用程序配置是通用应用程序项目开发人员所须要解决的重要问题之Web诸如或之类的版本限制系统是开发组织运用的CVS Subversion一种标准工具这种工具代表了一些组织的中心源代码版本库,它们被用于保持源代码的有序用户可以跟踪应用程序源代码的变更,显示不同版本的区分,并可以确定项目分支而且,它们使得在应用程序部署中进行部分更新成为可能很明显,版本限制系统软件是跟踪源代码所必需的,它对于解决应用程序配置问题有特别大的帮助在本文中,我们将不会把重点放在版本限制系统上,因为这方面已经有很多相关的材料了在此,我们将关注版本限制问题中的一个小话题如何使应用程序的配置更加便捷Web(尤其是运用框架编写的应用程序)Spring MVCWeb问题是我们在此探讨的是一种什么样的配置?任何应用程Web序都须要一些资源,这些资源通常都是其所运行的服务器所特有的,例如数据库、发送电子邮件的服务器,以及包含专用软件文件URL SMTP的文件夹等这样的设置应当集中,从而使应用程序配置更加简洁但是,这只是这个问题最简洁的一种版本有时候,在应用程序开发中须要更加困难的配置这意味着,必需将各次部署中的不同连接起来,而这会使问题更加困难Bean这些应用程序配置问题的解决方案有诸多优势,包括简化应用程序的安装和配置过程,使源代码版本限制更加简便,削减源代码版本库中的冲突现象下面,我们将通过示例具体探讨这个话题问题我们首先来演示一下上文所提到的最简洁的版本在这一场景中,我们希望在应用程序部署中变更的是简洁的配置参数,例如链接、密码等假如您曾经运用框架开发过应用程序,那么您Spring MVCWeb应当知道这里将用到的两个配置文件它让您可以配置•/WEB-INF/applicationContext.xml,或者显示应用程序上下文通过这个文件,您可以定义自己Bean,的业务逻辑、资源以及其他可以与端口相关联Bean Web的全部Beano它被用于配置•/WEB-INF/[servlet-name]-servlet.xml,层、视图解析器、限制器、校验器以及其他全部框架Web MVC中必需的指的是在部署描述Bean[servlet-name]web.xmlo符中定义的的名称Spring dispatcherservlet那么问题在哪儿呢?问题就出在中将包applicationcontext.xml括一些特定于主机的定义其中,最明显的一个示例就是Bean包含了连接信息的但是任何一种略微困难些的应用程JDBC bean,序都有十几个类似的看一下下面的示例Beaner/value/propertyproperty name=,urlvaluejdbc:postgresql://localhost/test/valu e/propertyproperty name=usernamevaluepostgres/value/propertyproperty name=passwordvaluex/value/property/bean这个解决方案的问题在于对文件的维护applicationcontext.xml对于初学者来说,设想一下,项目放在源代码版本限制系统中,例如CVS下面,假设您希望在网站中添加新的功能,那么就须要在应用程序上下文定义中添加额外的定义问题是如何在生产服务器上体现这些Bean变更通常状况下,应用程序的本地实例不会与活动站点运用同样的数据库,因止匕文件将包括让您能够访问本地数applicationcontext:.xml据库的设置当您想提交在源代码版本库中的变更时,就须要留意这些特定于主机属性的同步性版本库中的文件最终可能运用本地设置中的配置假如想在生产服务器上更新配置,就必需手动同步这些属性的值这是特别枯燥的任务,而且还特别简洁出错对于应用程序的每个实例来说,这个问题更加重要假如有三位开发人员正在运用代码段基址,而且他们运用的是本地的数据库当您提交更改的时候,他们每个人在本地服务器上更新源代码的时候都必需特别谨慎他们会手动同步这些更改,然后提交他们的工作这样一来,版本限制系统对于这些配置文件来说已经毫无用处假如曾经运用过那么您应当知道是应用程序中Spring MVC,applicationcontext.xml的关键组件,因为是它将全部的东西粘合在一起所以,我们须要一种机制来帮助使应用程序中各项保持有序,这点特别重要正如前面所提到的,这是您可能遇到的较简洁的配置问题更难的问题出现在当须要在不同服务器中进行不同的连接的时候这类Bean问题常会出现在日常软件开发任务中例如,假如您的产品有一个客户身份验证模块,可以对来自关系数据库或服务器中的用户进行身份LDAP验证自然,这一身份验证模块可以运用抽象了特定版本库的进Bean行配置假如您想变更不同应用程序部署中验证用户的方式,就须要在文件中进行不同的连接这种配置问题applicationcontext.xml Bean常见于在部署中有可配置特性的全部应用程序在下文中,我们将探讨这两种配置问题首先我们会关注同步的属性问题及其解决方案,接下来,我们会探讨更加困难的同步Bean Bean连接问题解决方案同步属性Bean这个问题的一种可行的解决方案是将全部特定于主机的参数都放到一般的属性文件中,运用的Java Spring将这些参数写入属性PropertyPlaceHolderConfigurer Bean中运用这一解决方案,我们可以生成如下的属性文件/WEB-INF/jdbc.propertiesjdbc.driver=org.postgresql.Driverjdbc.url=jdbc:postgresql://localhost/test jdbc.user=postgresjdbc.password=我们的配置如下Beanig.PropertyPlaceholderConfigurerproperty name=locationvalue/WEB-INF/jdbc.properties/value/property/beanbean id=,,dataSourcenclass=,^rg.springframework.jdbc.datasource.DriverManagerDataSourceHproperty name=,,driverClassNamevalue${jdbc.driver/value/propertyproperty name=,,url,,value${jdbc.url}/value/propertyproperty name=,,usernamevalue${jdbc.user}/value/propertyproperty name=,,passwordvalue${jdbc.password}/value/property/bean如上所述,我们定义了一个类的PropertyPlaceholderConfigurer实例,并将其位置属性设置为我们的属性文件该类被实现为工厂Bean的后处理器,并将运用定义在文件中的属性来代替全部的占位符${…}value利用这种技术,我们可以从中移除全部applicationcontext.xml特定于主机的配置属性通过这种方式,我们可以自由地为该文件添加新的而不必担忧特定于主机属性的同步性这样可以简化生产部Bean,署和维护同步性连接上面的技术解决了第一个问题,可是假如您安排修改不同应用程序部署之间的连接,这一技术便不很适合针对这一问题的一个解Bean决方案便是额外创建一个名为的定义文件其中applicationcontext-[hostname].xml XML是部署应用程序的主机的名称例如,在本地的机器上,[hostname]这个文件通常名为而在部署时,applicationContext-localhost.xml,它可能更名为applicationContext-somehost.xml可以揣测,这一文件必需包括特定于某一主机的全部配置在Beano本文中,我们将假设定义将位于这类文件中,而不是datasource bean通用的定义当然,这种机制与前者并非冲applicdtionContext.xml突,但是为了更加简洁明白,我们将只关注这种方法既然我们已经有了特定的配置,下面我们就来探讨一下如何将其整合到整个配置概念中要达到这一目的,可以有很多方法,Spring MVC我们将具体地一一说明但首先,我们应当留意到,由于有些可Bean能位于独立的配置文件中,因此在中,全部对它们的局部引用都必需更换成全局applicationcontext.xml名称例如,如下引用property name=someProperty,,ref local=HsomeBean7/property应更改为property name=,somePropertyref bean=someBean7/property在这之后,我们有很多可以添加额外的资源以用于配置的方式其中最明显的就是运用〈〉标签将这一额外资源包含在import配置文件中运用时,要将该标签放在applicationContext.xml文件开头例如applicationcontext.xmlimportresource=applicationContext-somehost.xml7现在,在独立的定义文件和一般的应用程序上下文定义文XML件中的全部通用定义都有了特定于主机的连接由于大多数的Bean。
个人认证
优秀文档
获得点赞 0