[英]In Spring integration, how do I use Util constant in router channel
我有一个用例,我在一个类中定义了所有常量。
public class MyExampleConstants {
public static String FOO1 = "hulcSmash";
public static String FOO2 = "billionairePlayBoy";
public static String FOO3 = "capShield";
}
现在我在 routerChan 中使用类似的东西来映射值:
//using exact string match in mapping value, however, want to see if the constants be used here.
<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint">
<int:mapping value="hulcSmash" channel="avengersHulcChan" />
<int:mapping value="billionairePlayBoy" channel="avengersIRManChan" />
<int:mapping value="capShield" channel="avengersCapAmericaChan" />
</int:router>
在路由器表达式中是这样的:
//Now these placeholders are being configured in properties
<int:router input-channel="channelABC" expression=" !payload.avengersVO.powType.equals('${avengers.hulc.smash}')
and !payload.avengersVO.powType.equals('${avengers.billionaire.PlayBoy}')
and !payload.avengersVO.powType.equals('${avengers.capShield}') ? 'flowEndpoint' : 'civilWarsChan'"/>
现在我已将常量添加到我的上下文中,并希望在我的路由器通道中将它们用作映射值:
<util:constant id="foo1" static-field="com.marvel.avengers.hulc.util.MyExampleConstants.FOO1"/>
<util:constant id="foo2" static-field="com.marvel.avengers.hulc.util.MyExampleConstants.FOO2"/>
<util:constant id="foo3" static-field="com.marvel.avengers.hulc.util.MyExampleConstants.FOO3"/>
<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint">
<int:mapping value="foo1" channel="avengersHulcChan" />
<int:mapping value="foo2" channel="avengersIRManChan" />
<int:mapping value="foo3" channel="avengersCapAmericaChan" />
</int:router>
并希望使用我在上面声明的常量将上面的表达式更新为类似的内容:
<int:router input-channel="channelABC" expression=" !payload.avengersVO.powType.equals('foo1')
and !payload.avengersVO.powType.equals('foo2')
and !payload.avengersVO.powType.equals('foo3') ? 'flowEndpoint' : 'civilWarsChan'"/>
请建议我如何使用它。 提前致谢。
您可以使用T
运算符直接在原始映射路由器中执行此操作:
<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint">
<int:mapping value="#{T(com.marvel.avengers.hulc.util.MyExampleConstants).FOO1}" channel="avengersHulcChan" />
...
</int:router>
或使用静态:
<int:router input-channel="powRouterChan" resolution-required="false" expression="payload.avengersVO.powType" default-output-channel="flowEndPoint">
<int:mapping value="#{foo1}" channel="avengersHulcChan" />
...
</int:router>
如果出于某种原因必须在表达式中执行此操作,请使用@foo1
,其中@
表示对 bean 的引用。 但前两种解决方案更有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.