我的要求是,我创建了一个具有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上给出了相同的结果,并且#34;找不到文件"。
可能是什么解决方案?
另一件事是我有一个共同的代码,我们在其中保留与不同环境相关的所有属性。这个常见代码的包装是jar形式。那么,我可以保留我在上面代码中使用的属性并从jar本身读取它。
如果是,那么如何?
答案 0 :(得分:2)
如果要在cloudhub中部署并外部化属性文件,请更好地使用Cloudhub属性选项卡来外部化值。
参考: - https://docs.mulesoft.com/runtime-manager/deploying-to-cloudhub#properties-tab
在Java类中,您可以使用以下方法选择属性值: - System.getProperty("yourpropertykey")
就像那个简单:)
关于在普通jar应用程序中保存属性文件,您需要使用<context:property-placeholder/>
从公共jar应用程序的类路径中获取属性文件,并且可以在宿主应用程序mule flow中使用它
答案 1 :(得分:0)
为实现这一目标,我们可以做一件事。为要获取的每个属性使用表达式组件集变量。
<expression-component doc:name="setVariable"><![CDATA[flowVars.clientId="${poc.clientId}";]]></expression-component>
此流变量可在Java类中访问,无论它保存在何处,即mule-app.properties或cloudhub运行时属性。
在Java类中,使用下面的代码我们可以读取此流变量。
String clientId = eventContext.getMessage().getInvocationProperty("clientId");
答案 2 :(得分:-1)
使用下面应该有效的示例代码。
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)