我有一个指导规则文件,它为一些收敛因子设置了配置。后来我有一个指导决策表,它具有相同的规则流组。即使我没有在这两个文件中提到任何显著性,指导规则也会首先执行,并设置配置值,并且在"指导决策“表中使用”指导规则“中设置的这些默认值。是否有一个特定的原因“为什么首先执行引导规则,而稍后执行引导决策表,即使它们具有相同的规则流组”
nue99wik1#
除非使用显著性,否则执行顺序是不确定的。不能保证规则A总是在规则B之前执行。它可能总是按此顺序执行(A -> B),但这并不保证,明天或下次您更改规则或更新版本时,可能会以不同的顺序进行。这通常与规则加载到内存中的顺序有关,(这就是为什么单个DRL文件中的非显著性规则往往从文件顶部到文件底部执行的原因,因为这是它们的读取顺序。)如果你的规则要求它们按照特定的顺序执行,你应该在它们上面加上显著性,这样规则X总是在规则Y之前执行,因为它们上面有显著性。或者,你可以重写你的规则,使其 * 不 * 依赖于执行顺序(无论如何,这被认为是一个好的实践)。Drools提供的唯一顺序保证是,具有给定显著性的规则将同时执行,尽管这些规则在显著性 * 内 * 的顺序不被保证。没有显著性的规则都被默认为显著性0,因此该保证成立。所有规则都执行,但没有顺序被保证,并且不一定能提前一致地确定(因此是“非确定性的”)。所以,在一天结束的时候,当你的问题是“哪条规则先被执行?”答案是--除非你有突出性,否则它应该不重要。如果它 * 确实 * 重要,你需要修正你的规则。
A -> B
1条答案
按热度按时间nue99wik1#
除非使用显著性,否则执行顺序是不确定的。不能保证规则A总是在规则B之前执行。它可能总是按此顺序执行(
A -> B
),但这并不保证,明天或下次您更改规则或更新版本时,可能会以不同的顺序进行。这通常与规则加载到内存中的顺序有关,(这就是为什么单个DRL文件中的非显著性规则往往从文件顶部到文件底部执行的原因,因为这是它们的读取顺序。)如果你的规则要求它们按照特定的顺序执行,你应该在它们上面加上显著性,这样规则X总是在规则Y之前执行,因为它们上面有显著性。或者,你可以重写你的规则,使其 * 不 * 依赖于执行顺序(无论如何,这被认为是一个好的实践)。
Drools提供的唯一顺序保证是,具有给定显著性的规则将同时执行,尽管这些规则在显著性 * 内 * 的顺序不被保证。没有显著性的规则都被默认为显著性0,因此该保证成立。所有规则都执行,但没有顺序被保证,并且不一定能提前一致地确定(因此是“非确定性的”)。
所以,在一天结束的时候,当你的问题是“哪条规则先被执行?”答案是--除非你有突出性,否则它应该不重要。如果它 * 确实 * 重要,你需要修正你的规则。