【发布时间】:2019-02-01 11:15:33
【问题描述】:
我有一些从命令行指定的系统属性 例如
mvn -Djdbc.url=... -Djdbc.user=... -Djdbc.password=... clean install
我不想从命令行显式指定每个值,而是希望有一个硬编码的 .properties 文件默认这些值,但我仍然可以根据需要使用命令行覆盖它们。
我知道properties-maven-plugin 是从文件中读取属性的几种方法之一,但是如何读取属性并将它们应用到系统范围内呢?这些属性似乎只在我的pom.xml 中使用时才有效。如果我有其他一些配置文件(例如 Hibernate 配置文件),它似乎不起作用。
例子:
在我的pom.xml 我有
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<!--
Alternatively this can read properties from a config file too
Hardcoded inline here for example purposes
-->
<property>
<jdbc.url>...</jdbc.url>
<jdbc.user>...</jdbc.user>
<jdbc.property>...</jdbc.property>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
现在我可以在pom.xml 的任何地方使用jdbc.* 属性,甚至可以根据需要从命令行覆盖它们。
但是在我的 Hibernate 配置文件中我有
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="dialect">org.hibernate.dialect.PostgreSQL95Dialect</property>
<property name="connection.url">${jdbc.url}</property>
...
...
</session-factory>
</hibernate-configuration>
jdbc.url 和其他属性在此处显示为空白/空字符串,因为我从文件中读取的属性仅适用于我的pom.xml。但是,如果我从命令行指定它,它可以在这里工作,因为它适用于整个应用程序。
有没有一种很好的方法来读取属性并像从命令行一样在应用程序范围内应用它们?
谢谢!
【问题讨论】:
-
你在用springboot吗?
-
@tryingToLearn - 我不是,我正在使用 spark-java。应该在问题中提到。
标签: java maven properties-file