2016-08-11 62 views
6

我創建了兩個maven的配置文件,因爲我想部署我的應用程序的Heroku, 所以我有一個配置文件開發與位於我的電腦數據庫屬性,PROD與性能爲heroku db。下面的pom.xml如何在Spring上下文中插入Maven的配置文件屬性

<modelVersion>4.0.0</modelVersion> 
<groupId>com.phone-book</groupId> 
<artifactId>phone-book</artifactId> 
<packaging>pom</packaging> 
<version>1.0-SNAPSHOT</version> 
<modules> 
    <module>controller</module> 
    <module>dao</module> 
    <module>model</module> 
    <module>service</module> 
</modules> 
<name>Phonebook web app</name> 
<build> 
    <filters> 
     <filter>profiles/${build.profile.id}/config.properties </filter> 
    </filters> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>controller/src/main/webapp/WEB-INF/spring</directory> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
      <configuration> 
       <skipTests>true</skipTests> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals><goal>copy</goal></goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>com.github.jsimone</groupId> 
           <artifactId>webapp-runner</artifactId> 
           <version>8.0.30.2</version> 
           <destFileName>webapp-runner.jar</destFileName> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <build.profile.id>prod</build.profile.id> 
     </properties> 
    </profile> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build.profile.id>dev</build.profile.id> 
     </properties> 
    </profile> 
</profiles> 

我每個行家模塊輪廓包含文件夾開發督促 ,寫我的道具就像這個教程https://www.petrikainulainen.net/programming/tips-and-tricks/creating-profile-specific-configuration-files-with-maven/ Finaly創建Spring上下文這個PARAM中創建的文件夾,見下文

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="${url.property}" /> 
    <property name="username" value="${user.property}" /> 
    <property name="password" value="${password.property}" /> 
    <property name="initialSize" value="20" /> 
    <property name="maxActive" value="100"/> 
</bean> 

但是當我做我的應用程序,性能不會取代我也得到類似的東西 Cannot create JDBC driver of class 'org.postgresql.Driver' for connect URL '${url.property}'

+0

您是否嘗試在beans xml文件定義中添加''? – nowszy94

+0

@ nowszy94是的,當我寫這個我有彈簧exe123 – Jungle

回答

4

我沒有看到你在哪裏在您的應用程序上下文中加載具體屬性文件。

我認爲你需要在你的應用程序上下文類似的東西:

<context:property-placeholder location="classpath:profiles/${build.profile.id}/config.properties" /> 

控制器模塊的濾波應該在它的pom文件中,以便其構建生命週期過程中應用它。這樣,當構建根時應用過濾,而不是在構建控制器模塊時應用。

這些模塊應該將根pom設置爲其父項,以便它們可以繼承配置文件和屬性。

+0

但我有 profiles/$ {build.profile.id} /config.properties我不確定我需要這個 Jungle

+0

變量名是$ {build.profile.id}在你的案例中 – vbuhlev

+0

告訴spring加載和解析這個屬性文件。我不確定什麼是默認行爲,但我認爲沒有任何東西會被默認加載。 – vbuhlev

1

看來你的配置文件屬性與沿不一致,你的屬性複製到

PROD:輪廓應該是

<profile> 
    <id>prod</id> 
    <properties> 
    <build.profile.id>prod</build.profile.id> 
    </properties> 
</profile> 

副本位置屬性,在類路徑中的位置,應該是通常喜歡的東西(除非你在你的maven中指定了不同的位置)

<resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 

,你應該有屬性,如文件,

config.properties

user.property=xxxxx 
.. 
在督促

/dev的文件夾

,並在運行,你應該清楚地調用你MVN型材的東西像這樣

mvn -P dev clean install

MVN -P督促全新安裝

和@vbhlev建議你需要有這樣的豆XML

<context:property-placeholder location="classpath:/config.properties" /> 
+0

對不起,我有錯誤,我只是複製無效的POM.xml,現在的問題是正確的 – Jungle

+0

檢查是否複製屬性文件到正確的類路徑位置 – kuhajeyan

+0

是所有操作系統正確的,當我寫錯誤的路徑應用程序只是不使 – Jungle

相關問題