2011-10-31 50 views
3

我有一個簡單的spring mvc應用程序,使用maven和intellij。使用Maven建立本地和IntelliJ的生產環境

你如何去爲生產和開發創建單獨的文件?

例如說我想爲nhibernate設置一個生產和開發mysql連接字符串?

我怎麼能有這樣的它,當我構建它會採取正確的文件用搶的配置信息? (和命名規範的文件有什麼建議?)

回答

2

使用Ant任務是相當直截了當這一點。

首先,在你pom創建<project>下幾個配置文件:

<profiles> 
    <profile> 
    <id>build-dev</id> 
    <activation> 
     <!-- <activeByDefault>true</activeByDefault> --> 
     <property> 
     <name>env</name> 
     <value>dev</value> 
     </property> 
    </activation> 
    <properties> 
     <config.name>config.dev.properties</config.name> 
    </properties> 
    </profile> 
    <profile> 
    <id>build-prod</id> 
    <activation> 
     <property> 
     <name>env</name> 
     <value>prod</value> 
     </property> 
    </activation> 
    <properties> 
     <config.name>config.prod.properties</config.name> 
    </properties> 
    </profile> 
</profiles> 

然後使用maven-antrun-plugin

<plugins> 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     <configuration> 
      <tasks> 
      <delete file="${project.build.outputDirectory}/config.properties"/> 
      <copy file="src/main/resources/${config.name}" tofile="${project.build.outputDirectory}/config.properties"/> 
      <delete file="${project.build.outputDirectory}/config.dev.properties"/> 
      <delete file="${project.build.outputDirectory}/config.prod.properties"/> 
      </tasks> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

當您運行mvn現在你只需指定你想要的資料。如果你想有一個默認,取消和地點:在你想用默認的配置文件

<!-- <activeByDefault>true</activeByDefault> --> 

部分。如果沒有指定,構建將在螞蟻任務上失敗。

+0

有點偏離主題,但我讀過關於每秒獲取15K個請求的另一篇文章,您是否有我可以與您聯繫的電子郵件?非常好奇! – codecompleting

2

有很多方法可以解決這個問題。

一般來說,像DB連接字符串可以進入屬性文件,並使用PropertyPlaceholderConfigurer在Spring XML配置文件所取代。一個常見的技巧就是創建一個自定義實現,查找可用於決定實際使用哪個屬性文件的-D啓動參數,用戶名,機器名等。

同樣的技巧也可以用於Spring配置文件,也可以通過創建一個XmlWebApplicationContext(?我永遠不會記得要繼承的類)的實現來添加/修改默認的getConfigLocations以添加(例如,以前綴爲用戶名或機器名,-D啓動參數值等。

順便說一句,你不使用NHibernate的,如果你使用的是Java,您在使用Hibernate。

編輯布賴恩的做法是那些「噸辦法」之一,我只是想保持它的配置沒有建立,即動態的基礎上任意「局部」的條件,等等。所以我真的可以方便地更換的事情了。

+0

呃,我是「保持簡單,愚蠢」的忠實粉絲。我實際上發現,最初在maven網站上作爲處理不同配置文件的推薦方式;現在似乎無法找到它。 –

+0

@BrianRoach只要您的需求永遠不會改變,開發人員無需進行任何設置,並且您只需部署一組有限的配置。我沒有在現實生活中發生過,但是YMMV。讓事情能夠以某種方式輕易被覆蓋已經爲我的團隊節省了大量的時間 - 這些子類實際上是長達半打/十幾行。 –

+0

我從來沒有發現需要做其他事情。 20年來。這就是說,我不會做網絡或桌面的東西,而且通常在任何給定的應用程序中使用相當狹窄的一組參數。我猜我的里程可能以公里爲單位) –