Java 使用属性文件和Maven配置文件外部化Web应用程序配置的最佳方法
拥有一个Java Maven web应用程序,该应用程序在驻留在中的以下配置文件中设置了硬编码属性: src/main/resources/database.xmlJava 使用属性文件和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
<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}
问题:
/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中显式设置这些属性
如何配置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。