java - Maven - 构建后如何使用“* .properties”文件?
问题描述
我的项目结构中有这些文件夹
- /src/main/java
- /src/main/资源
在“资源”文件夹中,我有 2 个文件:"config.properties"
和"logging.properties"
.
我的 pom.xml 中有以下“”:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>myapp.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
当我运行“mvn clean package”时,它会生成带有 jar 的“target”文件夹和包含上述属性文件的“classes”文件夹。
要读取其中一个属性文件(单击按钮后),我使用以下代码:
Properties prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("logging.properties"));
String logFolder = prop.getProperty("myApp.property");
//Do something with 'logFolder'
它运行正常。
但是,如果我更改“logging.properties”文件中的“myApp.property”,则更改不会影响“logFolder”值。
我必须做什么才能动态更改属性值并使我的应用程序读取新值而不重新编译项目?
谢谢你。
解决方案
您可以手动调用相应的插件:
mvn resources:resources maven-assembly-plugin:single
虽然这无论如何都不是最好的选择。最好不要为本地部署重新打包:
- 只需在 IDE 中启动应用程序,而不是构建 JAR。IDE 将检测配置中的更改。
- 通常允许使用环境变量或系统变量覆盖您的变量。因此,在阅读文件后,还要检查这些值是否被覆盖并使用它们。
对于远程部署,我们通常不会将配置文件保存在 JAR 中(您不想在其中保存 PRD 密码,对吗?)。所以部署到远程环境应该使用来自受限来源的配置文件。这意味着应用程序需要能够读取不在 JAR 中的配置。
推荐阅读
- java - 如何修复布局管理
- splunk - 如何配置 Splunk 转发器以从 stdout/stderr 而不是从文件中收集数据?
- c# - 使用 sql 的 Gridview 搜索/过滤
- html - 如何根据用户选择的值动态更改初始表单值?姜戈
- reactjs - 如何使用 flow-typed 类型化 Redux store?
- node.js - mongoose 创建和更新 _ nodejs mongoose
- c++ - 使用自己的 istream_iterator 封装数据访问
- mongoose - 如何在猫鼬中使用 UpdateMany
- php - 用php去除html代码和空格
- javascript - 如何在云功能中访问 firebase 数据库中的其他数据?