2017-06-25 65 views
2

具有帶有硬編碼在下面的配置文件中設置的屬性駐留在一個Java Maven的web應用程序外部化的Web應用程序配置:最佳方式使用屬性文件和Maven型材

的src /主/資源/ database.xml

<beans xmlns="http://www.springframework.org/schema/beans"> 
     <bean id="aDatasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> 
     <property name="url"><value>jdbc:mysql://anIpAddress/mydatabase?zeroDateTimeBehavior=convertToNull</value></property> 
     <property name="username"><value>root</value></property> 
     <property name="password"><value>password</value></property> 
    </bean> 
</beans> 

的src /主/資源/ log4.j.properties

log4j.appender.RF.File=/opt/apache-tomcat-7.0.78/webapps/myapp/WEB-INF/classes/logs.log 

之前,我運行Maven乾淨安裝,我不斷地編輯這些文件由內而外database.xml更換:

aniPAddress with localhost 
root with my local database's root user 
password with my local database's root password 

內log4.properties:

/opt/apache-tomcat-7.0.78/ with $CATALINA_HOME 

問題(S):

  1. 有沒有辦法來外部配置文件,所以我沒有明確地改變它每次我做了一個新的Git結賬?

例如

我應該創建位於包含下列屬性的src/main /資源內的application.properties文件:

database.url = localhost 
database.user = root 
database.password = 
tomcat.home = $CATALINA_HOME or /etc/tomcat7/ 

如何將這些明確設置內部database.xml和/或log4j.properties?

  1. 有沒有辦法使用maven profile功能切換配置屬性?

例如

maven clean -install -p dev 
maven clean -install -p prod 

如何配置pom.xml文件以反映問題1中所需的行爲?

+0

如果你正在使用spring(由你的xml判斷),我真的不明白爲什麼你不能在application.properties中設置你的屬性(就像你自己提到的那樣)。然後你可以設置路徑到那個配置,比如--spring.config.location =/loc/to/config/file。您甚至可以使用配置文件,例如:application-dev.pproperties並將您的配置文件設置爲dev --spring.profiles.active = dev。 – CrazySabbath

回答

3

您可以使用資源篩選,看https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

鑑於以下POM:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/filtered-resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
    </build> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <jdbc.url>localhost</jdbc.url> 
     </properties> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <jdbc.url>server.prod</jdbc.url> 
     </properties> 
    </profile> 
</profiles> 
</project> 

,並在文件的src/main /過濾資源/應用以下內容。屬性:

database.url = ${jdbc.url} 

與 「MVN -Pdev過程的資源」 的文件目標/班/ application.properties將包含:

database.url = localhost 

,並以 「MVN -Pprod過程的資源」:

database.url = server.prod 
1

找到有關如何加載基於外部屬性在服務器啓動時春數據源database.xml回答我的第一個問題:

這就像把這個條目database.xml文件中一樣簡單:

<bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
    <property name="location" value="file:/proplocation/database.properties"></property> 
</bean> 

沒有人知道Queston#2的答案嗎?

有沒有辦法使用maven profile功能切換配置屬性?

例如

maven clean -install -p dev 
maven clean -install -p prod