我试图在Mule Groovy脚本中访问Spring初始化属性但没有成功。
在Mule应用程序XML中加载属性文件:
<context:property-placeholder location="application.properties"/>
属性文件的内容:
key=value
从应用程序内部访问属性XML可以正常工作:
<logger message="key: ${key}" level="INFO" doc:name="Logger" />
产生以下输出:
key: value
在一个时髦的剧本中尝试相同的事情:
log.info "key: ${key}"
异常结果:
Exception stack is:
1. No such property: key for class: Script1 (groovy.lang.MissingPropertyException)
org.codehaus.groovy.runtime.ScriptBytecodeAdapter:53 (null)
2. groovy.lang.MissingPropertyException: No such property: key for class: Script1 (javax.script.ScriptException)
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl:326 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/script/ScriptException.html)
3. Failed to invoke ScriptComponent{main-flow.component.32928685}. Component that caused exception is: ScriptComponent{main-flow.component.32928685}. Message payload is of type: ContentLengthInputStream (org.mule.component.ComponentException)
org.mule.component.AbstractComponent:144 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/component/ComponentException.html)
********************************************************************************
Root Exception stack trace:
groovy.lang.MissingPropertyException: No such property: key for class: Script1
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
at Script1.run(Script1.groovy:18)
<snip>
我假设所有属性都可以在脚本可用的Groovy脚本上下文引用中的某个位置使用,但我没有找到有关如何导航到它们的文档。我查看了JavaDocs,但是无法将Spring初始化属性解析的正确方法拼凑在一起。非常感谢任何帮助。
谢谢, 史蒂夫
答案 0 :(得分:1)
我在following post找到了我的问题的答案。简而言之,
Spring属性占位符在配置时解析,不存储在任何地方,因此无法在之后加载。
如果你需要存储它,你总是可以将它们注入一个bean并从注册表中检索它。
根据上面提供的答案,此行为可能在Mule运行时的较新版本中已更改,但我使用3.5.4版的经验与其他帖子对MEL解释器如何评估Spring属性的描述一致。 / p>
答案 1 :(得分:0)
您使用的是哪个版本的Mule运行时? 我可以使用Mule运行时3.7.3中的以下示例从属性文件中获取值: -
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<flow name="teFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
<logger message="key: ${key}" level="INFO" doc:name="Logger" />
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[
System.out.print("In Groovy Script "+${key}+"\n");
log.info "In Groovy logger: ${key}";
]]></scripting:script>
</scripting:component>
</flow>
application.properties 包含: -
key=555
输出在Mule控制台中如下: -