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 依赖项内的属性文件的主要内容,如果未能解决你的问题,请参考以下文章