首页 > 解决方案 > 将 prop 文件值与后端值进行比较

问题描述

在下面需要帮助。

我想从属性文件和属性文件键和值中读取值,如下所示:org.cc.bu.combo=A1289||B2234,A8976||B7765

我将从后端接收密钥和值,单位=A1289,成本=B2234,

我想将属性值 A1289||B2234 与 unit=A1289 和 cost=B2234 进行比较。如果匹配,那么我需要打印匹配,否则打印不匹配。

我需要写入 .java 文件,但只能在 Mule 项目中使用。

标签: mulemule-studiomule-componentmulesoftmule-esb

解决方案


为了在 Java 中做到这一点,我创建了一个简单的类:

package org.cc.bu.combo;

import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class UnitChecker {
    
    static private Map<String, String> parseCombo(String combo) {
        Pattern pattern = Pattern.compile(",");
        Map<String, String> c = pattern.splitAsStream(combo)
                .map(s -> {
                    String[] parts = s.split("\\|\\|");
                    return parts;
                }).collect(Collectors.toMap(p -> p[0], p -> p[1]));
                
        return c;
    }
    
    static public boolean check(String combo, String unit, String cost) {
        Map<String, String> c = parseCombo(combo);
        String value = c.get(unit);
        return cost.equals(value);
    }
}

可以从这样的流程中调用它:

    <set-variable value="A1289||B2234,A8976||B7765" variableName="combos" />
    <java:invoke-static doc:name="Invoke static"  class="org.cc.bu.combo.UnitChecker" method="check(java.lang.String,java.lang.String,java.lang.String)">
        <java:args ><![CDATA[#[{combo: vars.combos, unit: 'A1289', cost: 'B2234' }]]]></java:args>
    </java:invoke-static>

您需要将Java 模块添加到项目中(始终使用最新版本),并确保您正在编译Java 8 源代码兼容性。如果您以前没有,请将以下属性添加到 pom:

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

推荐阅读