Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用属性文件和Maven配置文件外部化Web应用程序配置的最佳方法_Java_Maven_Properties_Log4j_Properties File - Fatal编程技术网

Java 使用属性文件和Maven配置文件外部化Web应用程序配置的最佳方法

Java 使用属性文件和Maven配置文件外部化Web应用程序配置的最佳方法,java,maven,properties,log4j,properties-file,Java,Maven,Properties,Log4j,Properties File,拥有一个Java Maven web应用程序,该应用程序在驻留在中的以下配置文件中设置了硬编码属性: src/main/resources/database.xml <beans xmlns="http://www.springframework.org/schema/beans"> <bean id="aDatasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="clos

拥有一个Java Maven web应用程序,该应用程序在驻留在中的以下配置文件中设置了硬编码属性:

src/main/resources/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>
在运行maven clean install之前,我一直在通过替换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
database.url = localhost
database.user = root
database.password = 
tomcat.home = $CATALINA_HOME or /etc/tomcat7/
database.url = ${jdbc.url}
问题:

  • 有没有办法将配置文件外部化,这样我就不必每次执行新的Git签出时都显式地更改它
  • e、 g

    我是否应该在src/main/resources内创建一个application.properties文件,其中包含以下属性:

    /opt/apache-tomcat-7.0.78/ with $CATALINA_HOME
    
    database.url = localhost
    database.user = root
    database.password = 
    tomcat.home = $CATALINA_HOME or /etc/tomcat7/
    
    database.url = ${jdbc.url}
    
    如何在database.xml和/或log4j.properties中显式设置这些属性

  • 有没有一种方法可以使用maven概要文件特性来切换配置属性
  • e、 g


    如何配置pom.xml文件以反映问题1中要求的行为?

    找到了关于如何在服务器启动时基于外部属性加载Spring datasource database.xml的第一个问题的答案:

    /opt/apache-tomcat-7.0.78/ with $CATALINA_HOME
    
    database.url = localhost
    database.user = root
    database.password = 
    tomcat.home = $CATALINA_HOME or /etc/tomcat7/
    
    database.url = ${jdbc.url}
    
    只需将此条目放入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>
    

    找到了关于如何基于外部属性在服务器启动时加载Spring datasource database.xml的第一个问题的答案:

    /opt/apache-tomcat-7.0.78/ with $CATALINA_HOME
    
    database.url = localhost
    database.user = root
    database.password = 
    tomcat.home = $CATALINA_HOME or /etc/tomcat7/
    
    database.url = ${jdbc.url}
    
    只需将此条目放入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>
    

    您可以使用资源筛选,请参阅

    鉴于以下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>
    
    使用“mvn-Pdev进程资源”,文件target/classes/application.properties将包含:

    database.url = localhost
    
    并使用“mvn-Pprod流程资源”:


    您可以使用资源筛选,请参阅

    鉴于以下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>
    
    使用“mvn-Pdev进程资源”,文件target/classes/application.properties将包含:

    database.url = localhost
    
    并使用“mvn-Pprod流程资源”:

    如果您使用的是spring(从xml判断),我真的不明白为什么不能在application.properties中设置属性(就像您提到的那样)。然后可以设置该配置的路径,如--spring.config.location=/loc/to/config/file。您甚至可以使用配置文件,比如:application-dev.pproperties,并将您的配置文件设置为dev--spring.profiles.active=dev。如果您使用的是spring(从xml判断),我真的不明白为什么您不能在application.properties中设置属性(就像您提到的那样)。然后可以设置该配置的路径,如--spring.config.location=/loc/to/config/file。您甚至可以使用配置文件,比如:application-dev.pproperties,并将您的配置文件设置为dev--spring.profiles.active=dev。