最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC配置多個(gè)properties文件之通配符解析

 更新時(shí)間:2021年09月08日 10:02:48   作者:朝著希望前進(jìn)  
這篇文章主要介紹了SpringMVC配置多個(gè)properties文件之通配符解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringMVC配置多個(gè)properties文件之通配符

在springmvc中配置加載properties文件一般會(huì)在

xml文件中配置如下

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

如果希望在項(xiàng)目中添加了一個(gè)新的模塊,并且希望新的模塊和之前項(xiàng)目相對(duì)獨(dú)立,需要新添加一個(gè)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屬性設(shè)置為true。

解決方案是:利用通配符

具體如下:

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

多個(gè)SpringMVC項(xiàng)目配置統(tǒng)一管理

來自于springCloud的統(tǒng)一配置思路

因公司項(xiàng)目分多個(gè)系統(tǒng)進(jìn)行開發(fā),而系統(tǒng)架構(gòu)幾乎完全一樣,所以同樣的配置文件會(huì)存在不同的系統(tǒng)中

當(dāng)其中的某些配置需要修改時(shí),就需要依次把所有系統(tǒng)中相關(guān)的配置都修改掉

純耗時(shí)且沒技術(shù)含量的體力活

所以借鑒SpringCloud的統(tǒng)一配置文件管理思想來對(duì)公司多個(gè)系統(tǒng)的配置文件也進(jìn)行統(tǒng)一管理

1.首先是properties文件

針對(duì)諸如數(shù)據(jù)庫(kù)連接等類似的共通信息,如果數(shù)據(jù)庫(kù)信息發(fā)生變更則都需要修改,為了方便者直接在服務(wù)器上放置一個(gè)默認(rèn)的連接配置

并發(fā)布到IIS等server上,通過http請(qǐng)求能夠獲取到

  

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

<?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默認(rèn)是支持http和file方式加載資源的

2.針對(duì)各類xml配置文件

項(xiàng)目中除了web.xml外,還有眾多的xml

和propertie文件一樣,也是相同的配置文件存在于不同的項(xiàng)目中,一改就要挨個(gè)改,煩

同理,將xml發(fā)布,并修改IIS設(shè)置,使其通過瀏覽器能訪問

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

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

<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>

這樣就可以直接啟動(dòng)了,啟動(dòng)時(shí)可以查看下面日志信息確定加載內(nèi)容是正確的

最開始是修改為這樣的

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

和classpath一樣,但是很遺憾,解析不了統(tǒng)配費(fèi),找不到文件

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)

仔細(xì)看源碼 加載配置文件的源碼 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)};
            }
        }
    }

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

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

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

雖然有遠(yuǎn)端服務(wù)了,但是遠(yuǎn)端服務(wù)只是一個(gè)默認(rèn)的全局配置,

為了方便本地修改部分參數(shù)進(jìn)行調(diào)試,所以在需要的時(shí)候,修改部分xml地址為classpath中的,只是在提交代碼的時(shí)候不要提交

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

以上僅為個(gè)人項(xiàng)目經(jīng)驗(yàn),其實(shí)就是把默認(rèn)的classpath修改為了http,多思考,多總結(jié),多實(shí)踐,小改動(dòng),大用處。希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中Cglib代理類重寫邏輯詳解

    Java中Cglib代理類重寫邏輯詳解

    這篇文章主要介紹了Java中Cglib代理類重寫邏輯詳解,代理類中只會(huì)維護(hù)NoOp這個(gè)回調(diào)屬性,并不會(huì)生成目標(biāo)類MyService中的noOp所對(duì)應(yīng)的方法,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于pytorch相關(guān)部分矩陣變換函數(shù)的問題分析

    關(guān)于pytorch相關(guān)部分矩陣變換函數(shù)的問題分析

    這篇文章主要介紹了pytorch相關(guān)部分矩陣變換函數(shù),包括tensor維度順序變換BCHW順序的調(diào)整,矩陣乘法相關(guān)函數(shù),矩陣乘,點(diǎn)乘,求取矩陣對(duì)角線元素或非對(duì)角線元素的問題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • SpringBoot整合resilience4j實(shí)現(xiàn)接口限流

    SpringBoot整合resilience4j實(shí)現(xiàn)接口限流

    最近在開發(fā)項(xiàng)目的時(shí)候,需要用到限流的功能,本文主要介紹了SpringBoot整合resilience4j實(shí)現(xiàn)接口限流,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Java Spring分別實(shí)現(xiàn)定時(shí)任務(wù)方法

    Java Spring分別實(shí)現(xiàn)定時(shí)任務(wù)方法

    這篇文章主要為大家詳細(xì)介紹了Java與Spring設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法,定時(shí)任務(wù)的應(yīng)用場(chǎng)景十分廣泛,如定時(shí)清理文件、定時(shí)生成報(bào)表、定時(shí)數(shù)據(jù)同步備份等
    2022-07-07
  • Java代碼審計(jì)的一些基礎(chǔ)知識(shí)你知道嗎

    Java代碼審計(jì)的一些基礎(chǔ)知識(shí)你知道嗎

    這篇文章主要介紹了基于Java的代碼審計(jì)功能的基礎(chǔ)知識(shí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-09-09
  • @PathVariable、@RequestParam和@RequestBody的區(qū)別

    @PathVariable、@RequestParam和@RequestBody的區(qū)別

    本文主要介紹了@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java技巧:反射判斷field類型的操作

    java技巧:反射判斷field類型的操作

    這篇文章主要介紹了java技巧:反射判斷field類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 詳解Java實(shí)現(xiàn)簡(jiǎn)單SPI流程

    詳解Java實(shí)現(xiàn)簡(jiǎn)單SPI流程

    這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單SPI流程,SPI英文全稱為Service Provider Interface,顧名思義,服務(wù)提供者接口,它是jdk提供給“服務(wù)提供廠商”或者“插件開發(fā)者”使用的接口
    2023-03-03
  • java環(huán)境變量path和classpath的配置

    java環(huán)境變量path和classpath的配置

    這篇文章主要為大家詳細(xì)介紹了java系統(tǒng)環(huán)境變量path和classpath的配置過程,感興趣的小伙伴們可以參考一下
    2016-07-07
  • java中生產(chǎn)者消費(fèi)者問題和代碼案例

    java中生產(chǎn)者消費(fèi)者問題和代碼案例

    大家好,本篇文章主要講的是java中生產(chǎn)者消費(fèi)者問題和代碼案例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論

石嘴山市| 龙口市| 汉中市| 文化| 隆子县| 务川| 平谷区| 黑龙江省| 呼玛县| 明溪县| 织金县| 乐山市| 宁远县| 连江县| 德清县| 香河县| 酉阳| 花莲市| 江川县| 白沙| 许昌县| 麻城市| 通江县| 枣强县| 盐津县| 天长市| 中西区| 金湖县| 雅安市| 时尚| 郑州市| 丹凤县| 射洪县| 卢龙县| 聂荣县| 右玉县| 信宜市| 广饶县| 定安县| 金昌市| 鸡泽县|