|
该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0! |
Groovy支持阵容
在 Spring Integration 2.0 中,我们增加了 Groovy 支持,允许你使用 Groovy 脚本语言为各种集成组件提供逻辑——类似于 Spring 表达式语言(SpEL)在路由、转换及其他集成问题上的支持。 欲了解更多关于Groovy的信息,请参阅项目网站上的Groovy文档。
你需要把这种依赖性纳入你的项目中:
-
Maven
-
Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-groovy</artifactId>
<version>6.3.12-SNAPSHOT</version>
</dependency>
compile "org.springframework.integration:spring-integration-groovy:6.3.12-SNAPSHOT"
此外,从6.0版本开始,还提供了用于集成流程配置的Groovy DSL。
Groovy 配置
在 Spring Integration 2.1 中,Groovy 支持的配置命名空间是 Spring Integration 脚本支持的扩展,共享脚本支持部分详细描述的核心配置和行为。
尽管Groovy脚本得到了通用脚本支持,但Groovy支持还提供槽的配置命名空间,由 Spring 框架的支持org.springframework.scripting.groovy.GroovyScriptFactory以及相关组件,提供Groovy的扩展功能。
以下列表展示了两种示例配置:
<int:filter input-channel="referencedScriptInput">
<int-groovy:script location="some/path/to/groovy/file/GroovyFilterTests.groovy"/>
</int:filter>
<int:filter input-channel="inlineScriptInput">
<int-groovy:script><![CDATA[
return payload == 'good'
]]></int-groovy:script>
</int:filter>
如前述示例所示,该配置与一般脚本支持配置完全相同。
唯一的区别是使用 Groovy 命名空间,具体由酷炫命名空间前缀。
还要注意朗属性<脚本>标签在此命名空间中无效。
Groovy 对象定制
如果你需要自定义Groovy对象本身(除了设置变量之外),你可以引用一个实现GroovyObjectCustomizer通过使用定制器属性。
例如,如果你想通过修改元阶级并注册脚本中可用的函数。
以下示例展示了如何实现:
<int:service-activator input-channel="groovyChannel">
<int-groovy:script location="somewhere/SomeScript.groovy" customizer="groovyCustomizer"/>
</int:service-activator>
<beans:bean id="groovyCustomizer" class="org.something.MyGroovyObjectCustomizer"/>
设置自定义GroovyObjectCustomizer与 不互斥<可变的>元素或脚本变量生成器属性。
在定义内联脚本时也可以提供该信息。
Spring Integration 3.0 引入了变量属性,该功能与变量元素。
此外,groovy 脚本能够将变量解析为豆子工厂如果没有提供绑定变量的名称,则为 。
以下示例展示了如何使用变量(entityManager):
<int-groovy:script>
<![CDATA[
entityManager.persist(payload)
payload
]]>
</int-groovy:script>
entityManager必须是应用上下文中的合适豆子。
欲了解更多关于<可变的>元素,该变量属性,以及脚本变量生成器属性,参见脚本变量绑定。
Groovy 脚本编译器定制
这@CompileStatic提示是Groovy最受欢迎的编译器定制选项。
它可以在类级或方法层面使用。
更多信息请参见Groovy参考手册,特别是《@CompileStatic》。
为了在集成场景中利用这一功能来处理短脚本,我们不得不将简单的脚本改成更像Java的代码。
请考虑以下内容<Filter>脚本:
headers.type == 'good'
前述脚本在春季集成中变为以下方法:
@groovy.transform.CompileStatic
String filter(Map headers) {
headers.type == 'good'
}
filter(headers)
说到这里,filter()方法被转换并编译为静态 Java 代码,绕过了 Groovy
调用的动态阶段,例如getProperty()工厂和CallSite代理。
从4.3版本开始,你可以用编译静态 布尔选项,指定ASTTransformationCustomizer为@CompileStatic应该加到内部编译器配置.
有了这个条件,你可以省略 Doc 的方法声明@CompileStatic但仍然能得到编译好的纯Java代码。
在这种情况下,前述文字可以很短,但仍需要比解释式文字更冗长一些,如下示例所示:
binding.variables.headers.type == 'good'
你必须访问头和有效载荷(或其他任何)变量通过groovy.lang.Script 捆绑性质,因为,其中@CompileStatic,我们没有GroovyObject.getProperty()能力。
此外,我们还引入了编译器配置比恩的引用。
通过该属性,你可以提供其他必要的Groovy编译器定制,例如:ImportCustomizer.
有关此功能的更多信息,请参见 Groovy 文档中的高级编译器配置。
用编译器配置不会自动添加ASTTransformationCustomizer对于@CompileStatic注释,并且覆盖了compile静态选择。
如果你还需要编译静态你应该手动添加一个new ASTTransformationCustomizer(CompileStatic.class)进入合辑定制器该习俗编译器配置. |
Groovy 编译器的自定义不会影响刷新-检查-延迟选项脚本和可加载脚本也可以静态编译。 |
控制总线
如(企业集成模式)中所述,控制总线背后的理念是,你可以使用与“应用级”消息传递相同的消息系统来监控和管理框架内的组件。 在 Spring Integration 中,我们基于之前描述的适配器,使你可以发送消息作为调用暴露作的方式。 这些作的一个选择是Groovy脚本。 以下示例为控制总线配置Groovy脚本:
<int-groovy:control-bus input-channel="operationChannel"/>
控制总线有一个输入通道,可以在应用上下文中调用豆子作。
Groovy 控制总线在输入通道上以 Groovy 脚本的形式运行消息。
它接收一条消息,将正文编译成脚本,并用GroovyObjectCustomizer,并运行它。
控制总线”消息处理器在应用上下文中,暴露所有注释为@ManagedResource并实现Spring的生命周期接口或扩展 Spring可定制线程编辑器基类(例如,若干任务执行者和任务调度器实现)。
在Control Bus的命令脚本中使用带有自定义作用域(如“请求”)的管理豆时要小心,尤其是在异步消息流中。
如果消息处理器如果控制总线无法从应用上下文中暴露 BEAN,你可能会得到一些豆子例外在指令脚本运行期间。
例如,如果未建立自定义作用域的上下文,尝试将豆子置于该范围时会触发BeanCreationException. |
如果你需要进一步自定义Groovy对象,也可以提供一个实现GroovyObjectCustomizer通过定制器属性,如下例所示:
<int-groovy:control-bus input-channel="input"
output-channel="output"
customizer="groovyCustomizer"/>
<beans:bean id="groovyCustomizer" class="org.foo.MyGroovyObjectCustomizer"/>