mule/java - 从 java 类读取 jar 依赖项内的属性文件

Posted

技术标签:

【中文标题】mule/java - 从 java 类读取 jar 依赖项内的属性文件【英文标题】:mule/java - reading a property file which is inside of jar dependency from java class 【发布时间】:2018-01-04 12:06:10 【问题描述】:

我的要求是,我创建了一个具有 java 类的 mule 应用程序。我不想将其保留为硬编码的一些值,因此我试图将其外部化。我将这些值保存在 mule-app.properties 文件中,并使用 FileInputStream 如下。

String propFileName = "src/main/app/mule-app.properties"
Properties property = new Properties();
property.load(new FileInputStream(propFileName));

但是这段代码需要部署在CloudHub上;那里没有说找不到该文件。我尝试将文件名的路径指定为

String propFileName = "target/classes/mule-app.properties"

对于这两种情况,它在本地运行良好,但在 CloudHub 上给出的结果与“未找到文件”相同。

有什么解决办法?

另一件事是我有一个通用代码,其中我们保留了与不同环境相关的所有属性。这个通用代码的打包是jar的形式。那么,我可以保留我在上面代码中使用的属性并从 jar 本身中读取它吗?

如果是,那么如何?

【问题讨论】:

【参考方案1】:

如果您想在 cloudhub 中部署并外部化您的属性文件,最好使用 Cloudhub 属性选项卡来外部化这些值。 参考:- https://docs.mulesoft.com/runtime-manager/deploying-to-cloudhub#properties-tab

在 Java 类中,您可以使用以下方法选择属性值:- System.getProperty("yourpropertykey") 就这么简单:)

关于在普通jar应用中保存属性文件,您需要使用<context:property-placeholder/>从普通jar应用的类路径中获取属性文件,并可以在您的宿主应用程序mule flow中使用它

【讨论】:

【参考方案2】:

要实现这一点,我们可以做一件事。为要获取的每个属性使用表达式组件集变量。

<expression-component doc:name="setVariable"><![CDATA[flowVars.clientId="$poc.clientId";]]></expression-component>

无论保存在何处(即 mule-app.properties 或 cloudhub 运行时属性),都可以在 Java 类中访问此流变量。

在 Java 类中,使用下面的代码我们可以读取这个流变量。

String clientId = eventContext.getMessage().getInvocationProperty("clientId");

【讨论】:

【参考方案3】:

使用下面的示例代码应该可以工作。

FileInputStream fi = new FileInputStream(System.getProperty("C:\Users\userName\
      AnypointStudio\workspace\test\src\main\resources\my-app1.propertie");

Properties prop = new Properties();
prop.load(fi)

【讨论】:

它肯定会工作,但在云或本地部署后将无法读取属性。这不是编写整个路径位置的好习惯。

以上是关于mule/java - 从 java 类读取 jar 依赖项内的属性文件的主要内容,如果未能解决你的问题,请参考以下文章

通过JAVA从MQ读取消息的时候报错及解决

docker上的Spring启动无法从资源中读取属性文件,但可以在没有Docker的情况下使用java -jar

如何在 Java 中真正从类路径中读取文本文件

如何在 Java 中真正从类路径中读取文本文件

自定义jar配置文件问题?

java File类