一. 问题描述
某日在EDI值班时, 某研发前来询问一种令他困惑的现象, 在RCP环境和线上环境, 相同el表达式的计算结果不一致. el表达式类似${map.prop eq 'anyway'}, 其从一个map中获取指定属性值与某字符判等. 当map中存在prop属性时, 两个环境结果一致, 但当map中不存在该prop时, 两个环境则结果不一致. 线上环境不符合期望.
二. 尝试路径
- 通过RCP里的EL表达式测试工具测试类似场景, 结果符合预期.
- 把该流程发布到测试环境, 测试后发现与RCP表现一致.
- 初始认定故障原因是其编排的流程有误, EL表达式类库错误暂忽略. 开始着手review其流程, 无果.
- 增加日志信息, 打印出el表达式执行的语句和结果. 发现问题是
线上执行的是另一个流程, 原因是测试环境和线上环境的配置不一致, 导致通过配置的内容来匹配流程, 导致结果不一致.
三. 反思
- 最早的尝试路径没有基于足够的上下文信息, 导致做了很多无用功.
- 有些问题无从下手的时候, 先丰富下上下文信息, 然后再行动.