2016-02-03 149 views
0

我很難理解maven構建配置文件。maven - spring項目構建配置文件

基本上我的配置文件目錄的結構是這樣的

src/main/resources/profiles/dev/database.properties 

src/main/resources/profiles/test/database.properties 

我有這個配置在我的pom.xml

 <build> 
     ... 
      <filters> 


<filter>src/main/resources/profiles/${build.profile.id}/database.properties</filter> 
      </filters> 
      <resources> 
       <resource> 
       <filtering>true</filtering> 
       <directory>src/main/resources/</directory> 
      </resource> 
     </resources> 
    </build> 

    <profiles> 
     <profile> 
      <id>dev</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <properties> 
       <build.profile.id>dev</build.profile.id> 
      </properties> 
     </profile> 
     <profile> 
      <id>test</id> 
      <properties> 
       <build.profile.id>test</build.profile.id> 
      </properties> 
     </profile> 
    </profiles> 

然後在我的基於Java的數據源配置:

@Configuration 
@PropertySource("classpath:profiles/${spring.profiles.active}/database.properties") 

當我運行我的應用程序時,我把虛擬變量參數-Dspring.profiles.active=test所以它會加載在配置文件/測試下的e database.properties。然後,突然間我意識到,如果沒有我在pom.xml中添加的配置,我可以做到這一點。即使我不需要我的pom.xml中的配置,這仍然是正確的構建配置文件的實施?

更新:這是我的分辨率 現在我明白了使用Maven型材的,我所做的是創建將舉行基於主動輪廓結構中另一層。本是正確的,我正在混合春天配置文件與maven配置文件。

我已經創造了另一個文件database.properties資源下,與此內容:

db.driver=${db.driver} 
db.url=${db.url} 
db.username=${db.username} 
db.password=${db.password} 

現在我的數據源配置只指的是新的圖層不知道哪個配置文件被激活,因爲Maven會編譯過程中解決此時間。

@Configuration 
@PropertySource("classpath:database.properties") 

回答

2

這取決於你的目標是什麼,看來你正在將Maven Profiles與Spring Profiles不同的概念混爲一談。使用Maven Profile可以在BUILD時間導致不同的行爲,而Spring Profile會在RUN時間導致不同的行爲。如果您只是想根據運行哪個配置文件加載不同的配置文件,則可能存在一些不同的可能性。如果您使用的是彈簧啓動,您只需要在src/main/resources中有一個application-<profile-name>.properties文件 - 每個配置文件一個。如果您只使用Spring MVC,則可以有兩個@Configuration classes,每個@Profile一個,每個配置@PropertiesSource以及適用於活動配置文件的database.properties文件。或者,您可以保持原樣並通過SpEL中指定的目錄路徑加載文件。在任何情況下,您都不需要對Maven配置文件做任何事情,因爲這些都只是運行時問題,並且src/main/resources下的所有內容都將默認包含在生成的包(war,ear,可執行jar等)中。

+0

在任何情況下,您都不需要對Maven配置文件做任何事情?我以爲maven是爲build時間? – fuzzy28

+0

你能建議我如何實現我的目標,當我想爲兩個不同的數據庫連接有兩個單獨的db.properties文件時。 – fuzzy28

+0

個人而言,假設使用Spring Boot(我強烈推薦),我只需要在我的application.properties文件中包含連接字符串信息,並且對於src/main中的所有配置文件,我都擁有相同的配置/ resources/application.properties'然後我會在'/ src/main/resources/application-dev.properties'和'src/main/resources/application-test.properties'中設置特定於配置文件的數據庫連接屬性 – Ben