ODM规则或XOM如何识别当前执行环境为生产还是非生产环境
ODM运行环境标识传递解决方案
ODM规则语言本身没有内置专门用于区分运行环境的全局变量,你可以通过以下三种成熟方案实现需求:
- 通过规则集入参传递环境标识
先在规则集(RuleSet)定义中新增一个String类型的入参,命名建议为runtimeEnv。在调用规则服务的客户端侧,根据当前部署的环境传入对应枚举值,比如prod/uat/dev。你可以直接在规则动作块中把该参数传递给XOM对应的Java方法,规则示例:
该方案兼容性最强,不依赖ODM版本和部署配置,也支持在规则逻辑中直接根据环境做分支判断。when // 规则条件 then EnvConfig.load(runtimeEnv); // 其他规则逻辑 - 读取RES自定义部署属性
登录规则执行服务器(RES)控制台,在对应规则应用/规则集的配置页新增自定义属性,比如键为yourcompany.env.type,不同环境的RES实例设置对应的值。你需要先在BOM中映射IlrContext类型,之后在规则中把上下文对象传给XOM的Java方法,Java侧读取属性示例:import ilog.rules.engine.IlrContext; public class EnvConfig { public static void load(IlrContext ruleContext) { String env = (String) ruleContext.getRuleSession().getProperty("yourcompany.env.type"); // 按env加载对应配置 } } - 读取JVM系统属性
在RES所在的应用服务器启动参数中添加JVM属性,比如-Dservice.runtime.env=prod,XOM的Java类可以直接通过System.getProperty("service.runtime.env")读取环境标识,不需要修改任何规则代码,适合仅XOM需要使用环境信息的场景。
注意:所有环境标识都应该从部署侧注入,不要在规则或XOM代码中硬编码环境判断逻辑,避免规则包跨环境迁移时需要改代码。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

