Mule Groovy脚本中的Spring属性解析

时间:2016-08-08 17:30:45

标签: spring groovy properties mule

我试图在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初始化属性解析的正确方法拼凑在一起。非常感谢任何帮助。

谢谢, 史蒂夫

2 个答案:

答案 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控制台中如下: -

enter image description here