簡體   English   中英

在 Spring 集成中,如何在路由器通道中使用 Util 常量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM