Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpEL-parseExpression性能_Java_Spring_Spring El - Fatal编程技术网

Java SpEL-parseExpression性能

Java SpEL-parseExpression性能,java,spring,spring-el,Java,Spring,Spring El,作为我项目的一部分,我正在实现一个基于SpEL的规则引擎,并试图使其尽可能高效。基本上,引擎由SpEL语法中的持久化条件组成。当需要评估输入时,我会在DB中查询相关规则-SpEL表达式,这些规则在包含输入对象的EvaluationContext上运行 我已经在应用程序中使用了Ehcache,所以我也想在这个服务中使用缓存EvaluationContext缓存是毫无疑问的,因为每个请求的输入都不同。缓存DB查询也不是那么容易,因为特定日期是查询的一部分-不同的规则在不同的时间有效 我曾考虑过缓存解

作为我项目的一部分,我正在实现一个基于
SpEL
的规则引擎,并试图使其尽可能高效。基本上,引擎由
SpEL
语法中的持久化条件组成。当需要评估输入时,我会在DB中查询相关规则-
SpEL
表达式,这些规则在包含输入对象的
EvaluationContext
上运行

我已经在应用程序中使用了Ehcache,所以我也想在这个服务中使用缓存
EvaluationContext
缓存是毫无疑问的,因为每个请求的输入都不同。缓存DB查询也不是那么容易,因为特定日期是查询的一部分-不同的规则在不同的时间有效

我曾考虑过缓存解析的
表达式
对象,但我不知道从
字符串
解析
表达式
的成本有多高,以及避免
表达式
解析所节省的时间是否足以弥补通过
Spring
查询缓存的成本

有人知道使用缓存存储解析的
表达式
对象是否有效吗


非常感谢

这可能取决于表达式的复杂性,但我希望缓存在所有方面都是值得的,除了最简单的表达式

为什么不运行一些性能测试呢

编辑

EvaluationContext
缓存是毫无疑问的,因为每个请求的输入都不同

您通常可以重用评估上下文;只需将根对象与上下文一起传递到表达式中,而不是将其存储在上下文中

Object getValue(EvaluationContext context, Object rootObject) throws EvaluationException;

不过,有一个例外是,如果每次评估都需要不同的
#变量

可以使用SpEL编译进行进一步优化

查看SpEL官方文档中的SpEL编译和编译器配置部分:

@Tomas,如果您能够通过SpEL实现任何性能改进,我也需要这样做。