一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringMVC配置多個properties文件之通配符解析

SpringMVC配置多個properties文件之通配符解析

2021-12-23 13:00朝著希望前進 Java教程

這篇文章主要介紹了SpringMVC配置多個properties文件之通配符解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringMVC配置多個properties文件之通配符

在springmvc中配置加載properties文件一般會在

xml文件中配置如下

<context:property-placeholder location="classpath:resources/properties/zza.properties" 
      ignore-unresolvable="true" /> 

如果希望在項目中添加了一個新的模塊,并且希望新的模塊和之前項目相對獨立,需要新添加一個properties文件的話,那么需要在xml配置文件中,再配置一份。比如:

<context:property-placeholder location="classpath:resources/properties/zza.properties" 
      ignore-unresolvable="true" /> 
      <context:property-placeholder location="classpath:resources/properties/weixin.properties" 
      ignore-unresolvable="true" />

這樣做就太麻煩了,每次添加完properties文件還得在xml文件中添加。并且還必須把ignore-unresolvable屬性設置為true。

解決方案是:利用通配符

具體如下:

  <context:property-placeholder   location="classpath*:resources/properties/*.properties" />

 

多個SpringMVC項目配置統一管理

來自于springCloud的統一配置思路

因公司項目分多個系統進行開發,而系統架構幾乎完全一樣,所以同樣的配置文件會存在不同的系統中

當其中的某些配置需要修改時,就需要依次把所有系統中相關的配置都修改掉

純耗時且沒技術含量的體力活

所以借鑒SpringCloud的統一配置文件管理思想來對公司多個系統的配置文件也進行統一管理

1.首先是properties文件

針對諸如數據庫連接等類似的共通信息,如果數據庫信息發生變更則都需要修改,為了方便者直接在服務器上放置一個默認的連接配置

并發布到IIS等server上,通過http請求能夠獲取到

  SpringMVC配置多個properties文件之通配符解析

然后修改加載資源文件的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
          <list>
              <value>http://192.168.0.32:82/properties/jdbc.properties</value>
          </list>
      </property>
  </bean>
</beans>

PropertyPlaceholderConfigurer默認是支持http和file方式加載資源的

2.針對各類xml配置文件

項目中除了web.xml外,還有眾多的xml

SpringMVC配置多個properties文件之通配符解析

和propertie文件一樣,也是相同的配置文件存在于不同的項目中,一改就要挨個改,煩

同理,將xml發布,并修改IIS設置,使其通過瀏覽器能訪問

iis需要增加MIME類型 properties和xml為text/plain才能在瀏覽器訪問

SpringMVC配置多個properties文件之通配符解析

然后就可以在瀏覽器訪問了

SpringMVC配置多個properties文件之通配符解析

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
                  http://192.168.0.32:82/springConfig/applicationContext-resource.xml,
                  http://192.168.0.32:82/springConfig/applicationContext-db.xml,
                  http://192.168.0.32:82/springConfig/applicationContext-redis.xml,
                  http://192.168.0.32:82/springConfig/applicationContext-redission.xml,
                  http://192.168.0.32:82/springConfig/applicationContext-service.xml,
                  http://192.168.0.32:82/springConfig/applicationContext-filter.xml
          </param-value>
  </context-param>
<servlet>
      <description>spring-mvc</description>
      <servlet-name>mvc</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>
              http://192.168.0.32:82/spring-mvc.xml
<!--                 classpath:spring-mvc.xml -->
          </param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>

這樣就可以直接啟動了,啟動時可以查看下面日志信息確定加載內容是正確的

SpringMVC配置多個properties文件之通配符解析

最開始是修改為這樣的

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
                  http://192.168.0.32:82/springConfig/applicationContext-*.xml
          </param-value>
  </context-param>

和classpath一樣,但是很遺憾,解析不了統配費,找不到文件

java.io.FileNotFoundException: URL [http://192.168.0.32:82/springConfig/] cannot be resolved to absolute file path because it does not reside in the file system: http://192.168.0.32:82/springConfig/
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:215)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:53)
at org.springframework.core.io.UrlResource.getFile(UrlResource.java:213)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.doFindPathMatchingFileResources(PathMatchingResourcePatternResolver.java:689)
at org.springframework.web.context.support.ServletContextResourcePatternResolver.doFindPathMatchingFileResources(ServletContextResourcePatternResolver.java:92)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:478)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:293)

仔細看源碼 加載配置文件的源碼 PathMatchingResourcePatternResolver中這段

@Override
  public Resource[] getResources(String locationPattern) throws IOException {
      Assert.notNull(locationPattern, "Location pattern must not be null");
      if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX)) {
          // a class path resource (multiple resources for same name possible)
          if (getPathMatcher().isPattern(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()))) {
              // a class path resource pattern
              return findPathMatchingResources(locationPattern);
          }
          else {
              // all class path resources with the given name
              return findAllClassPathResources(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()));
          }
      }
      else {
          // Generally only look for a pattern after a prefix here,
          // and on Tomcat only after the "*/" separator for its "war:" protocol.
          int prefixEnd = (locationPattern.startsWith("war:") ? locationPattern.indexOf("*/") + 1 :
                  locationPattern.indexOf(":") + 1);
          if (getPathMatcher().isPattern(locationPattern.substring(prefixEnd))) {
              // a file pattern
              return findPathMatchingResources(locationPattern);
          }
          else {
              // a single resource with the given name
              return new Resource[] {getResourceLoader().getResource(locationPattern)};
          }
      }
  }

思路都很簡單,配置的頭尾解析出目錄和含有通配符的文件,然后依次去找哪些文件滿足

不過很遺憾的是,如果是http開頭的通配符路徑,暫時是不支持的,支持classpth,jar等方式

不過讓人欣慰的是,是可以重寫文件加載方式的,原因很簡單,http目錄知道了,要知道目錄下面有哪些文件還是很簡單的(需要開啟iis的目錄瀏覽),然后取到所有文件后,如果和通配符匹配,則加載

雖然有遠端服務了,但是遠端服務只是一個默認的全局配置,

為了方便本地修改部分參數進行調試,所以在需要的時候,修改部分xml地址為classpath中的,只是在提交代碼的時候不要提交

若的確需要修改,則可以通知有服務器操作權限的人(我們公司比如我 ^_^)進行全局修改

以上僅為個人項目經驗,其實就是把默認的classpath修改為了http,多思考,多總結,多實踐,小改動,大用處。希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://loong.blog.csdn.net/article/details/46777809

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
主站蜘蛛池模板: 三上悠亚精品专区久久 | 国产欧美视频一区二区三区 | 色综合中文字幕天天在线 | 久久综合香蕉久久久久久久 | 国产精品免费久久久久影院 | 男男gaygays国内 | 免费超级乱淫播放手机版 | 美女靠逼动漫 | 成全视频在线观看免费 | 免费一级特黄特色大片在线观看 | 骚虎最新网址 | caoporn超碰 | 色综合视频在线 | 亚洲天堂伦理 | 国产免费大片 | 插插好爽爽爽 | 被肉日常np高h | 欧美亚洲影院 | 双夫1v2 | 鄂州一家三口完整版免费 | 午夜神器老司机高清无码 | 99视频有精品视频免费观看 | 美味情缘韩国在线观看视频 | 亚洲欧美国产精品久久久 | 网友偷自拍原创区 | 午夜爱爱爱爱爽爽爽视频网站 | 91aaa免费免费国产在线观看 | 亚洲天天做夜夜做天天欢 | 性色老女人 | 欧美日韩视频在线成人 | 楚乔传第二部免费播放电视连续剧 | 国产精品免费视频一区一 | 青青青视频免费线看 视频 青青青青青国产免费手机看视频 | 欧美日韩一区二区三区久久 | 四虎论坛 | 国产欧美亚洲精品第一页青草 | 亚洲色图图| 9lporm自拍视频在线 | 亚洲丁香网 | 精品视频国产 | 国产99热99|