1. 程式人生 > 程式設計 >Java使用路徑萬用字元載入Resource與profiles配置使用詳解

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

序言

Spring提供了一種強大的Ant模式萬用字元匹配,能從一個路徑匹配一批資源。

Ant路徑萬用字元

Ant路徑萬用字元支援“?”、“*”、“**”,注意萬用字元匹配不包括目錄分隔符“/”:

“?”:匹配一個字元,如“config?.xml”將匹配“config1.xml”;

“*”:匹配零個或多個字串,如“cn/*/config.xml”將匹配“cn/javass/config.xml”,但不匹配匹配“cn/config.xml”;而“cn/config-*.xml”將匹配“cn/config-dao.xml”;

“**”:匹配路徑中的零個或多個目錄,如“cn/**/config.xml”將匹配“cn /config.xml”,也匹配“cn/javass/spring/config.xml”;而“cn/javass/config-**.xml”將匹配“cn/javass/config-dao.xml”,即把“**”當做兩個“*”處理。

classpath和classpath*

Spring在載入類路徑資源時除了提供字首“classpath:”的來支援載入一個Resource,還提供一個字首“classpath*:”來支援載入所有匹配的類路徑Resource。

一、“classpath”:用於載入類路徑(包括jar包)中的一個且僅一個資源;對於多個匹配的也只返回一個,所以如果需要多個匹配的請考慮“classpath*:”字首;

二、“classpath*”:用於載入類路徑(包括jar包)中的所有匹配的資源。帶萬用字元的classpath使用“ClassLoader”的“Enumeration<URL>getResources(Stringname)”方法來查詢萬用字元之前的資源,然後通過模式匹配來獲取匹配的資源。如“classpath:META-INF/*.LIST”將首先載入萬用字元之前的目錄“META-INF”,然後再遍歷路徑進行子路徑匹配從而獲取匹配的資源。

classpath用在哪裡

在編譯打包後的專案中,根目錄是META-INFBOOT-INF。這個時候,我們可以看到classes這個資料夾,它就是我們要找的classpath。

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

這裡需要提一點是,此專案可能依賴底層的jar包,比如:api層需要引用dal層的jar包。想說的是所有依賴jar包中的classes是同一級別。

例項助理解:

此程式碼在api層的jar包中。

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

此資源是在dal層的jar包中

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

profiles配置環境配置資訊

<profiles>
    <profile>
      <!--prd env-->
      <id>prd</id>
      <properties>
        <profiles.active>prd</profiles.active>
      </properties>
    </profile>
    <profile>
      <!--local env-->
      <id>local</id>
      <properties>
        <profiles.active>local</profiles.active>
      </properties>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
    <profile>
      <!--UT env-->
      <id>ut</id>
      <properties>
        <profiles.active>ut</profiles.active>
      </properties>
    </profile>
    <profile>
      <!-- test env -->
      <id>test</id>
      <properties>
        <profiles.active>test</profiles.active>
      </properties>
    </profile>
  </profiles>

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

資原始檔使用pom檔案配置

@xx@圈起來或者${xx},內部是xml鏈式呼叫,如下:

啟用不同環境需配置profiles.active,也可以在pom檔案的profiles中定義,仔細看上面的配置檔案<activeByDefault> 節點local是被設定為啟用的

Java使用路徑萬用字元載入Resource與profiles配置使用詳解

[email protected]@
[email protected]@

如需正確解析,需在bulid中新增外掛

<build>
    <plugins>      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <!-- 指定配置檔案編碼 -->
          <encoding>UTF-8</encoding>
          <!-- 使用預設分隔符,${xxx}或者@xxx@ -->
          <useDefaultDelimiters>true</useDefaultDelimiters>
        </configuration>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <finalName>profit-monitor</finalName>
  </build>

4、啟用profile

1)預設的啟用

上面的profile配置中設定的預設的啟用環境。如下面所示

<activeByDefault>true</activeByDefault> 

2)使用-P引數顯示啟用一個profile

當我們在進行Maven操作時就可以使用-P引數顯示的指定當前啟用的是哪一個profile了。比如我們需要在對專案進行打包的時候使用id為dev的profile,我們就可以這樣做:

mvn package –Pdev

這裡假設dev是在settings.xml中使用dev標記的處於啟用狀態的profile,那麼當我們使用“-P !profile”的時候就表示在當前操作中該profile將不處於啟用狀態。

總結

java資源載入沒完,還有很多吧的,現在沒時間,就這些。

到此這篇關於Java使用路徑萬用字元載入Resource與profiles配置使用詳解的文章就介紹到這了,更多相關Java 路徑萬用字元載入配置內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!