国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Maven profile整合Spring profile

用戶84 / 513人閱讀

摘要:此時可以嘗試或命令打包,安裝包內的文件中占位符已被替換。整合原理項目中一般都會加上可以查看的文件,里面包含定義的值是這樣插件會將或文件中的替換為中對應的值。

在Maven和Spring中,都有profile這個概念。profile是用于區分各種環境的,例如開發環境、測試環境、正式環境等。Maven的profile用于在打包時根據指定環境替換不同環境的配置文件配置,如數據庫配置。Spring的Profile可以用于在不同的環境下加載不同的bean,例如@Profile注解。兩者一個是Maven編譯和打包時生效,另一個是運行時生效,默認是沒有關聯的,本文會分別介紹非Spring Boot項目和Spring Boot項目整合Maven profile。

Maven profile配置

pom.xml中,可以配置testproduct兩個profile,分別對應測試環境和正式環境。這里也可以根據具體情況自定義。


  
    test
    ...
  
  
    product
    ...
  

此時,運行mvn package -Ptest就會使用id為test的profile內的配置打包,mvn package -Pproduct就是用來打正式環境包的命令。

Spring Framework(非Spring Boot)整合Maven profile Spring Framework如何啟用一個profile

Spring啟用某個profile有多種方式(摘自官方文檔:https://docs.spring.io/spring... ):

Activating a profile can be done in several ways, but the most straightforward is to do it programmatically against the Environment API which is available through an ApplicationContext.
In addition, you can also declaratively activate profiles through the spring.profiles.active property, which may be specified through system environment variables, JVM system properties, servlet context parameters in web.xml, or even as an entry in JNDI.

總結一下有以下幾種方式:

通過代碼設置:ApplicationContext.getEnvironment().setActiveProfiles("yourProfile")

通過系統環境變量spring.profiles.active值來設置

通過JVM系統屬性spring.profiles.active值來設置

通過web.xml中的context-param來設置

為了便于跟Maven整合,我們使用web.xml來設置Spring profile,如下:


    spring.profiles.active
    product

以上配置會啟用Spring的product profile,即正式環境。

Spring Framework profile整合Maven profile

如果想要整合Maven profile和Spring Framework profile,需要在Maven打包時對web.xml中的spring.profiles.active值進行替換,可以在web.xml中配置一個占位符${activeProfile}


    spring.profiles.active
    ${activeProfile}

pom.xml配置maven-war-plugin



  
    maven-war-plugin
    3.2.2
    
      true
    
  




  dev



  
    test
    
      test
    
  
  
    product
    
      product
    
  

true表示過濾Deployment Descriptor并將文件中的占位符替換為pom.xml中對應的值,Deployment Descriptor即部署描述符,指的就是web.xml (參考維基百科:https://zh.wikipedia.org/wiki... )。

以上配置完成后,再通過mvn package -Ptestmvn package -Pproduct打包后,再解壓war包,可以看到web.xml中原有的


    spring.profiles.active
    ${activeProfile}

被替換為了Maven中對應的profile,例如mvn package -Pproduct打包后web.xml內容:


    spring.profiles.active
    product

以上就完成了Maven profile和Spring profile的整合。

兼容jetty-maven-plugin

如果恰好在項目中使用到jetty-maven-plugin用于開發環境調試,那么在web.xml配置占位符${activeProfile}后,通過mvn jetty:run啟動應用時會Spring框架會報錯:

Could not resolve placeholder "activeProfile" in string value "${activeProfile}"

這是因為運行mvn jetty:run命令時插件并沒有打war包,而是直接使用源碼中的web.xml,此時占位符${activeProfile}未被maven-war-plugin替換,所以Spring框架會報錯。

參考文檔:https://www.eclipse.org/jetty...

解決方法一

使用mvn jetty:run-warmvn jetty:run-exploded命令替代mvn jetty:run,這兩個命令會先用maven-war-plugin打好war包后再運行,此時占位符${activeProfile}已被替換為Maven的profile。

但是這種方案會帶來一個問題:由于這種方式需要先打war包再運行,開發時項目中資源(例如html、jsp)修改后就不會實時生效,而是需要重新打包啟動,不便于調試。

解決方法二(推薦)

這種方案還是使用mvn jetty:run命令,只需要給jetty-maven-plugin插件添加一個名為activeProfile的系統屬性,讓Spring框架來解析web.xml中的${activeProfile}


  org.eclipse.jetty
  jetty-maven-plugin
  9.2.10.v20150310
  
    
      /
    
    
      
        activeProfile
        ${activeProfile}
      
    
  

參考文檔:https://www.eclipse.org/jetty...

Spring Boot整合Maven profile

如果項目采用的框架是Spring Boot而不是直接使用Spring Framework,那么Spring Boot的profile可以在resources目錄下的application.propertiesapplication.yml文件中指定,以application.properties為例:

spring.profiles.active=product

要想整合Maven profile只需要改為@activeProfile@占位符即可:

spring.profiles.active=@activeProfile@

僅需要這一行配置就完成了Spring Boot profile整合Maven profile,非常方便。此時可以嘗試mvn package -Ptestmvn package -Pproduct命令打包,安裝包內的文件中@activeProfile@占位符已被替換。

Spring Boot整合Maven profile原理

Spring Boot項目中一般都會加上spring-boot-starter-parent


    org.springframework.boot
    spring-boot-starter-parent
    ${spring.boot.version}

可以查看spring-boot-starter-parent的pom.xml文件,里面包含maven-resources-plugin


    maven-resources-plugin
    
        
            ${resource.delimiter}
        
        false
    

${resource.delimiter}定義的值是@

@

這樣maven-resources-plugin插件會將application.propertiesapplication.yml文件中的@activeProfile@替換為pom.xml中對應profile的值。

至于為什么Spring Boot要使用@..@而不是Maven默認的${..}作為占位符的符號,官方文檔也給出了解釋,以下摘自:https://docs.spring.io/spring...

Note that, since the application.properties and application.yml files accept Spring style placeholders (${…?}), the Maven filtering is changed to use @..@ placeholders. (You can override that by setting a Maven property called resource.delimiter.)

因為Spring Boot框架本身也用${..}作為占位符,Maven插件maven-resources-plugin如果還使用相同的占位符,那么可能會導致一些沖突,所以spring-boot-starter-parentmaven-resources-plugin的占位符改為@..@。

參考文檔

Spring Framework: Activating a Profile

Spring Boot: Maven

Jetty Maven Plugin

維基百科:部署描述符(Deployment Descriptor)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73558.html

相關文章

  • Maven詳細教程

    摘要:清理上一次執行創建的文件處理資源文件編譯代碼執行單元測試文件創建拷貝到本地的倉庫下面發布生成文檔將工程所有文檔生成網站,生成的網站界面默認和的項目站點類似,但是其文檔用格式寫的,目前不支持,需要用其他插件配合才能支持。 前言 本文可以幫助你加深對Maven的整體認識,不是一篇基礎文章。如果你現在還沒有用 Maven 跑過 HelloWorld,那么本文可能不適合你。 一、Maven簡介...

    Keagan 評論0 收藏0
  • SpringCloud核心教程 | 第三篇:服務注冊與發現 Eureka篇

    摘要:下一篇介紹基于的服務注冊與調用。服務提供者工程配置這里服務提供者是使用之前進階教程第三篇整合連接池以及監控改造而來,這里一樣的部分就不再重復說明,下面將說明新增的部分。 Spring Cloud簡介 Spring Cloud是一個基于Spring Boot實現的云應用開發工具,它為基于JVM的云應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分...

    scq000 評論0 收藏0
  • Maven管理SpringBoot Profile

    摘要:的配置文件默認為或,此外僅以配置為說明。的由的標簽管理。管理由于構建是基于或,此處僅以說明。管理分五步,以下詳細介紹。并且為表示,會將文件內容的替換為相應的變量如文件中的會替換為屬性值。 1. Spring Profile Spring可使用Profile決定程序在不同環境下執行情況,包含配置、加載Bean、依賴等。 Spring的Profile一般項目包含:dev(開發), test...

    wenzi 評論0 收藏0

發表評論

0條評論

用戶84

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<