淺談Maven resrouce下filtering作用
filtering 作用
- 是啥:filtering是maven的resource插件中提供的一個功能。
- 為啥:想要解決編碼過程中的配置文件的變量注入的問題,如:在不同的開發(fā)環(huán)境下要啟用不同的配置屬性,如何靈活的切換?filtering為我們提供了方法。
- 咋用:首先通過上面的例子啟動,之后,就可以在pom文件中定義屬性,并在resources目錄下的配置文件,如application.yml中使用了,具體使用方法見下文詳述。
作用一 引入pom和resource 資源文件的變量預(yù)編譯配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
上面的代碼就是對resources目錄開啟了filtering過濾,不添加filtering ,默認認值為false。那么這個功能到底有什么效果呢?,
為了更深入的了解這個filtering,不妨從是什么?為什么?怎么用?三個方面進行闡述。
1.pom文件 讀取pom文件內(nèi)部的變量
- 在pom文件內(nèi)部對變量的應(yīng)用,都通過 v a l u e n a m e 的方式,比如常見的: {value_name}的方式,比如常見的: valuen?ame的方式,比如常見的:{project.artifactId}
2.application.yml 文件讀取application.yml 文件內(nèi)部的變量方式
- 在application.yml中對內(nèi)部變量的引用,通常也是使用${value_name}的方式,比如常見的:${server.port}
這樣就導(dǎo)致了一個沖突,兩種配置文件都用同一套標識符,那yaml文件怎么引入pom中的變量呢,于是就有了resource.delimiter這個屬性
3.yaml文件讀取pom文件的變量方式
如果查看spring-boot-starter-parent中的屬性欄,就可以看到赫然寫著:
<resource.delimiter>@</resource.delimiter>
這代表了什么?這表示,在yaml中如果要引用pom中的屬性,直接使用@標識符就行了,用法為@value_of_pom@。
就這樣,所以就出現(xiàn)了第三種變量的引用方式:
- 在resources的yaml文件中引用pom中的變量時,通過@value_of_pom@進行引用(前提是開啟了資源的過濾filtering)。
應(yīng)用場景
就是為多個環(huán)境進行配置的時候:一般情況下,開發(fā),測試,生產(chǎn)環(huán)境是不同的,尤其是其中有一些數(shù)據(jù)庫的配置,服務(wù)發(fā)現(xiàn)地址的配置,日志文件的位置等都有所區(qū)分。
如果每次一換環(huán)境,就手動去一點兒點兒改配置,無疑是耗時耗力的,那么有沒有一種方法,能夠快捷的將環(huán)境進行一鍵切換,能夠達到針對不同的運行環(huán)境采用不同配置的目的呢?
答案是可以的,就是利用我們的filtering對資源的動態(tài)管理。
filtering作為maven-resource插件中的一個功能,其起作用的時機是在maven生命周期中的resource階段,這是一個對資源做出處理,先于compile的一個階段。
4.pom文件讀取 .properties文件的變量
在Maven項目的pom.xml中,你可以使用元素來定義變量,并使用來指定資源文件的位置。如果你想要在pom.xml中讀取.properties文件中的變量,可以使用Maven的filtering功能。
以下是一個簡單的例子:
在src/main/resources目錄下創(chuàng)建一個.properties文件,比如config.properties。
src/main/resources/config.properties
database.url=jdbc:mysql://localhost/mydb database.user=myuser database.password=mypassword
在pom.xml中配置資源過濾和元素。
<project>
...
<properties>
<database.url>${database.url}</database.url>
<database.user>${database.user}</database.user>
<database.password>${database.password}</database.password>
</properties>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
...
</project>
filtering:決定是否將resources目錄下的文件中的tokens(即通過@val@標識的變量)進行參數(shù)替換。這里的參數(shù)主要有兩個來源,一個是來自于pom文件中的properties屬性,一個是來源于外部的.properties文件(個人認為這個文件不可與springboot中的配置文件混為一談)
那么如何引用外部的.properties文件呢?通過另一個標簽下的進行路徑的指定。
作用二 開啟resource 打包資源文件的過濾
通過includes和 excludes 標簽進行打包資源文件的過濾
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>a.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<!--filtering標簽的值默認是false,在這里可寫可不寫-->
<filtering>false</filtering>
<excludes>
<exclude>a.properties</exclude>
</excludes>
</resource>
</resources>
</build>
一些maven命令參數(shù)
主要用于切換環(huán)境的:
mvn resources:resources -Dfile=my-setting-file
這表示給pom中的file變量賦值為了my-setting-file,如果這個是設(shè)定的filter的文件名,即會引入my-setting-file中的設(shè)定參數(shù)。
mvn clean package -Ptest,jdk8,!os-windows
這表示啟用test,jdk8兩個profile,不激活os-windows。
到此這篇關(guān)于淺談Maven resrouce下filtering作用的文章就介紹到這了,更多相關(guān)Maven resrouce filtering作用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中多個線程交替循環(huán)執(zhí)行的實現(xiàn)
有些時候面試官經(jīng)常會問,兩個線程怎么交替執(zhí)行呀,本文就來詳細的介紹一下Java中多個線程交替循環(huán)執(zhí)行的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01
Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法詳解
這篇文章主要介紹了Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法,結(jié)合實例形式分析了java分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、跳轉(zhuǎn)語句等相關(guān)概念、原理、使用技巧與操作注意事項,需要的朋友可以參考下2020-02-02
MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn)
本文主要介紹了MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn),主要包括單個參數(shù)傳遞綁定,序號參數(shù)傳遞綁定,注解參數(shù)傳遞綁定,pojo(對象)參數(shù)傳遞綁定,map參數(shù)傳遞綁定這幾種類型,具有一定的參考價值,感興趣的可以了解一下2023-12-12
SpringBoot集成Redis之配置、序列化與持久化方式
本文介紹了Redis的基本概念、常用數(shù)據(jù)類型及操作、SpringBoot整合Redis的方法、高級特性與安全性、性能優(yōu)化、測試與部署、數(shù)據(jù)一致性及版本更新等內(nèi)容,通過本文的學習,讀者可以掌握Redis的使用方法,并在實際項目中發(fā)揮其優(yōu)勢2024-11-11
SpringBoot的@EnableAsync和@Async注解分析
這篇文章主要介紹了SpringBoot的@EnableAsync和@Async注解分析,Spring Boot是一個快速開發(fā)框架,可以幫助開發(fā)人員快速構(gòu)建基于Spring的應(yīng)用程序,需要的朋友可以參考下2023-07-07

