From 006d3911d9e587064cacec4d542017d360b4006a Mon Sep 17 00:00:00 2001 From: p-moon Date: Tue, 10 Dec 2024 10:47:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=831.0.1=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/create-plantuml.yml | 19 ++++ .../{release.yml => maven-publish.yml} | 0 .mvn/settings.xml.weibo | 1 + README.md | 68 +++++++++--- doc/execution-sequence-diagram.md | 100 ++++++++++++++++++ doc/img/README.md | 0 doc/img/idea.png | Bin 113109 -> 0 bytes doc/plantuml.md | 69 ------------ pom.xml | 2 +- .../plus/jdk/smart/ioc/global/Evalable.java | 8 ++ .../ioc/global/SmartIocSelectorFactory.java | 32 +++--- .../global/SmartIocSelectorFactoryTest.java | 28 +++-- .../service/DegradeByGlobalConfigTest.java | 8 ++ .../service/SmartFlowByMethodArgsTest.java | 1 + 14 files changed, 230 insertions(+), 106 deletions(-) create mode 100644 .github/workflows/create-plantuml.yml rename .github/workflows/{release.yml => maven-publish.yml} (100%) create mode 120000 .mvn/settings.xml.weibo create mode 100644 doc/execution-sequence-diagram.md create mode 100644 doc/img/README.md delete mode 100644 doc/img/idea.png delete mode 100644 doc/plantuml.md create mode 100644 src/main/java/plus/jdk/smart/ioc/global/Evalable.java diff --git a/.github/workflows/create-plantuml.yml b/.github/workflows/create-plantuml.yml new file mode 100644 index 0000000..84c7daa --- /dev/null +++ b/.github/workflows/create-plantuml.yml @@ -0,0 +1,19 @@ +name: generate plantuml +on: push +jobs: + generate_plantuml: + runs-on: ubuntu-latest + name: plantuml + steps: + - name: checkout + uses: actions/checkout@v1 + with: + fetch-depth: 1 + - name: plantuml + id: plantuml + uses: grassedge/generate-plantuml-action@v1.5 + with: + path: doc/img + message: "Render PlantUML files" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/maven-publish.yml similarity index 100% rename from .github/workflows/release.yml rename to .github/workflows/maven-publish.yml diff --git a/.mvn/settings.xml.weibo b/.mvn/settings.xml.weibo new file mode 120000 index 0000000..b5e3655 --- /dev/null +++ b/.mvn/settings.xml.weibo @@ -0,0 +1 @@ +/Users/jack/.m2/settings.xml.weibo \ No newline at end of file diff --git a/README.md b/README.md index 4441f90..1982eab 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,12 @@ ## 一、说在前面的话 -这是一种基于动态代理与配置中心切换 bean 的实现类来达到服务降级与流量灰度发布方法研究。 +本项目描述并实现了一种基于动态代理与配置中心切换 bean 的实现类来达到服务降级与流量灰度发布方法的研究。 这是一个通过动态切换接口的实现类(springboot 中的 bean ),实现了一种高效而灵活的解决方案,用于应对复杂系统中的服务降级和功能灰度发布。 **该项目提出并实现了一种使用动态代理和配置中心来管理某个接口的多个业务实现,通过动态切换 Bean 的实现类快速实现服务降级。 此外,借助 [JEXL](https://commons.apache.org/proper/commons-jexl/) 自定义方法的解析规则,还提供了一种小流量功能灰度发布的解决方案。** -在当今复杂的业务系统中,服务降级和功能灰度发布已成为保障系统稳定性和灵活性的关键需求。本项目通过动态切换接口的实现类(Spring Boot中的Bean),提出了一种高效而灵活的解决方案。 -利用动态代理和配置中心的结合,以及[JEXL](https://commons.apache.org/proper/commons-jexl/)自定义方法的解析规则,我们实现了对接口的多种业务实现进行动态管理, -从而快速应对服务降级和小流量功能灰度发布的场景。 - ## 二、相关工作 & 设计理念 **相关工作** @@ -32,7 +28,8 @@ ISP)则要求我们确保流程中的任何接口实现都可以被替换, 实现原理其实很简单,通过代理类来执行规则判定即可,通过时序图描述的逻辑如下: -![](doc/img/idea.png) + +![](doc/img/execution-sequence-diagram.svg) 你可以像这样子引入他: @@ -40,7 +37,7 @@ ISP)则要求我们确保流程中的任何接口实现都可以被替换, plus.jdk spring-smart-ioc-starter - 1.0.0 + 1.0.2 ``` @@ -55,11 +52,11 @@ ISP)则要求我们确保流程中的任何接口实现都可以被替换, **`@ConditionOnRule`执行 eval逻辑时运行环境中的一些魔法变量的说明** -| 变量名 | 说明 | 补充 | -|---------|---------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| args | 当前调用的方法的入参, 允许在condition rule里面使用函数入参判定是否调用该实现类的方法,这个参数每次执行方法调用的时候都会作为临时变量写入运行环境 | 例如,你的方法定义为```String greeting(String name, String sex);```, 那么你可以在 condition rule里面通过 `args.name` 或 `args.sex` 来访问被调用的方法(Method)的入参 | -| global | 全局的变量或工具类 | 你可以使用 `global` 在condition rule中访问你写入的全局变量或一些工具类,例如,当你使用 `globalSmartIocContext.registerGlobalVar("random", new Random()))`注册`random`后,可以使用这样子的表达式 `@ConditionOnRule("global.randdom.nextInt(100) % 10 >= 8")`来将 20% 的流量来打到当前的这个实现类上 | -| current | 允许在 condition rule 维度来访问当前的 beanName(`current.beanName`) 和 methodName(`current.methodName`) | 这里你可以通过监听配置中心使用 `@ConditionOnRule("current.beanName == global.myServiceName")` 来指定当前要切换为哪个实现类. 这里的 `myServiceName`可以通过 `GlobalSmartIocContext#registerGlobalVar(name, obj)`写入 | +| 变量名 | 说明 | 补充 | +|---------|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| args | 当前调用的方法的入参, 允许在condition rule里面使用函数入参判定是否调用该实现类的方法,这个参数每次执行方法调用的时候都会作为临时变量写入运行环境 | 例如,你的方法定义为```String greeting(String name, String sex);```, 那么你可以在 condition rule里面通过 `args.name` 或 `args.sex` 来访问被调用的方法(Method)的入参 | +| global | 全局的变量或工具类 | 你可以使用 `global` 在condition rule中访问你写入的全局变量或一些工具类,例如,当你使用 `globalSmartIocContext.registerGlobalVar("random", new Random()))`注册`random`后,可以使用这样子的表达式 `@ConditionOnRule("global.random.nextInt(100) % 10 >= 8")`来将 20% 的流量来打到当前的这个实现类上 | +| current | 允许在 condition rule 维度来访问当前的 beanName(`current.beanName`) 和 methodName(`current.methodName`) | 这里你可以通过监听配置中心使用 `@ConditionOnRule("current.beanName == global.myServiceName")` 来指定当前要切换为哪个实现类. 这里的 `myServiceName`可以通过 `GlobalSmartIocContext#registerGlobalVar(name, obj)`写入 | **写入全局变量:** @@ -88,6 +85,53 @@ public class SetGlobalConfigTest { } } ``` +接下来你可以通过`global`变量来访问这里注册的全局变量和全局函数.例如, 你可以像下面这样,指定当 qps 小于 2000 时利用注册的 random 函数将 20% 的流量打到这个实现上: + +```java +import plus.jdk.smart.ioc.annotations.SmartService; + +@ConditionOnRule("global.qps < 2000 && random.nextInt(100) % 10 > 8") +@SmartService(group = MyService.class) +public class QpsDegradeService implements MyService { + // do something +} +``` +**最后的魔法** + +思虑再三,虽然这样子会带来一些安全性的问题,但是这完全取决于使用者了,不应该舍本逐末。 +最后登场的魔法就是全局`jexl.eval(anyString())`函数了,这个函数允许你直接通过全局变量自定义脚本。 +> 当然了,你也可以是用局部变量来传递脚本来执行,但是注意,这是非常不安全的一种做法,因为函数的输入大多来自外部输入, +> 如果你把这个功能开放给外部输入,那你最好保证调用方是可信的,值得你去给他最高级别的执行权限!!!否则就不要这么做。 +> 甚至于,在上述功能足够满足你需求的情况下,尽量不要使用这个魔法函数,这里只是为了满足一些上述功能不能满足需求的场景 + +通过这个功能,你可以把你想要执行的脚本配置在 配置中心 中,当服务启动或配置变化时,通过如下指令来更新你的脚本到 `global` 对象中: + +```java +public class SmartIocSelectorFactoryTest { + + /** + * Global intelligent IOC context instance, used to obtain and manage global configuration information. + */ + @Resource + private GlobalSmartIocContext globalSmartIocContext; + + @Test + public void evalExpressionTest() { + // Test the magic jexl.eval() function + globalSmartIocContext.registerGlobalVar("testScript", "1 + 2"); + } +} +``` + +然后使用 `@ConditionOnRule("jexl.eval(global.testScript)")`配置在需要的类或者方法上即可。通过这个魔法方法你可以把你的切换规则放在配置中心,通过配置中心按需求动态下发即可!!! + +> 注意, 使用函数输入时,千万不要把 `args` 的成员变量的内容传递给`jexl.eval(anyString())`函数,这会导致你的入参变成可执行的脚本!!!比如你的函数入参分别为 `a=3`、`b=4`, +> 你可以这么写`@ConditionOnRule("jexl.eval(global.testScript) > args.a + args.b")`, 这是安全的; 但是如果你直接把 args的参数内容直接传递给`jexl.eval(anyString())`, +> 例如 `@ConditionOnRule("jexl.eval(args.b)"),这无疑是一种裸奔的行为,会导致你的服务受到攻击,甚至导致更严重的后果。 + +所以,我的朋友,我还是不得不提醒你,

__永远都不要把入参直接当做脚本执行,这不管在哪都是一样的, +就像[变基的风险](https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA.html#_rebase_peril)中提交到的, +如果你遵循这条金科玉律,就不会出差错。否则人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你!!!__

## 四、服务降级 & 小流量灰度的示例 diff --git a/doc/execution-sequence-diagram.md b/doc/execution-sequence-diagram.md new file mode 100644 index 0000000..5258206 --- /dev/null +++ b/doc/execution-sequence-diagram.md @@ -0,0 +1,100 @@ +```plantuml:execution-sequence-diagram +@startuml +title 启动 & 执行时序图 +!theme vibrant + +!define purple_color 6A00FF +!define green_color green +!define red_color FF05DE +!define yellow_color yellow +!define STRONG_TEXT(text) text +!define PURPLE_TEXT(text) text +!define GREEN_TEXT(text) text +!define BLUE_TEXT(text) text +!define GREEN_TEXT(text) text +!define RED_TEXT(text) text +!define YELLOW_TEXT(text) text +!define record_impl_msg GREEN_TEXT("记录bean加载过程中的每个接口的的实现类") +!define create_proxy_msg GREEN_TEXT("创建代理类并注册全局的 bean") +!define create_proxy_msg_note GREEN_TEXT("在这里会为指定interface生成代理类") +!define start_success_msg GREEN_TEXT("服务启动完成") +!define start_success_msg_note GREEN_TEXT("服务启动完成, 其他需要引入的地方使用 @Resource注解 按接口引入即可") +!define bean_load_flow GREEN_TEXT("bean加载流程") +!define logic_exec_group_name RED_TEXT(逻辑执行:通过组件生成的接口的代理类发起方法调用(该类直接通过 @Resource 注解注入即可)) +!define logic_exec_msg "通过代理类发起逻辑调用" +!define get_impl_msg 获取接口的实现类 +!define parse_condition_rule 解析实现类的切换规则 +!define jexl_engine_create_msg PURPLE_TEXT("创建jexl解析引擎") +!define jexl_engine_context_msg PURPLE_TEXT("向jexl注册方法入参") +!define jexl_engine_context_reg_msg PURPLE_TEXT("向jexl注册全局变量和自定义函数") +!define jexl_engine_eval_msg PURPLE_TEXT("通过 jexl 来执行脚本并获取返回结果") +!define jexl_engine_eval_result PURPLE_TEXT("jexl 执行输入的条件表达式并返回结果") +!define jexl_engine_eval_condition PURPLE_TEXT("判定jexl 执行输入的条件表达式是否为 true") +!define loop_bean_impl_msg "遍历所有的 bean 实现" +!define script_eval_true_msg "jexl eval结果为 true" +!define script_eval_false_msg "jexl eval结果为 false" +!define script_eval_false_continue_msg "继续遍历 eval下一个 bean的条件" +!define bean_impl_invoke_method_msg "调用符合条件的实现类的方法" +!define bean_impl_invoke_method_return_msg RED_TEXT("返回函数执行结果") +!define no_matching_rules_were_hit "未命中任何符合条件实现类" +!define get_default_implementation_annotated_via_primary_msg RED_TEXT(获取通过@SmartService的primary)\nRED_TEXT(属性标注的默认实现) +!define bean_load_flow_note GREEN_TEXT(在这里会扫描并记录所有接口被)\nRED_TEXT("@SmartService")GREEN_TEXT( 标注的实现类) +!define jexl_desc_note_line1 YELLOW_TEXT(JEXL(Java Expression Language)是Apache Commons项目中的一个子项目,它提供了 一种轻量级且灵活的表达式语言,) +!define jexl_desc_note_line2 YELLOW_TEXT(用于在Java应用程序中动态计算和操作数据。JEXL的设计初衷是为了使表达式的解析和执行变得简单且高效,同时保持与Java语言的紧密集成。) +!define jexl_desc_note_line3 YELLOW_TEXT(JEXL设计之初就考虑了性能问题,通过编译和缓存机制来提高表达式的执行效率。这里的逻辑判定耗时一般在纳秒级别) + + + +collections 服务启动 as service_start +collections 记录每个接口的实现类 as record_impl +collections 动态代理 as proxy_bean +collections 启动成功 as start_success +collections 业务逻辑调用 as logic_exec +collections Jexl引擎 as jexl_engine + +group bean_load_flow + autonumber + service_start -[#green]> record_impl : record_impl_msg + note left record_impl #yellow:bean_load_flow_note + record_impl -[#green]> proxy_bean: create_proxy_msg + note left proxy_bean #yellow: create_proxy_msg_note + proxy_bean -[#green]> start_success:start_success_msg + note left start_success #yellow:start_success_msg_note +end + +group logic_exec_group_name + autonumber + logic_exec -[#red]> proxy_bean:RED_TEXT(logic_exec_msg) + proxy_bean -[#red]> record_impl:RED_TEXT(get_impl_msg) + record_impl -[#red]> proxy_bean: RED_TEXT(parse_condition_rule) + loop STRONG_TEXT(RED_TEXT(loop_bean_impl_msg)) + note over proxy_bean,start_success #green + jexl_desc_note_line1 + jexl_desc_note_line2 + jexl_desc_note_line3 + end note + proxy_bean -[#purple_color]> jexl_engine: jexl_engine_create_msg + proxy_bean -[#purple_color]> jexl_engine: jexl_engine_context_msg + proxy_bean -[#purple_color]> jexl_engine: jexl_engine_context_reg_msg + proxy_bean -[#purple_color]> jexl_engine: jexl_engine_eval_msg + jexl_engine -[#purple_color]> proxy_bean: jexl_engine_eval_result + proxy_bean --[#purple_color]> proxy_bean: jexl_engine_eval_condition + alt RED_TEXT(script_eval_true_msg) + autonumber 10 + proxy_bean -> record_impl: RED_TEXT(bean_impl_invoke_method_msg) + record_impl -> proxy_bean: RED_TEXT(bean_impl_invoke_method_return_msg) + proxy_bean -> logic_exec: RED_TEXT(bean_impl_invoke_method_return_msg) + else RED_TEXT(script_eval_false_msg) + autonumber 10 + record_impl -> record_impl: RED_TEXT(script_eval_false_continue_msg) + end + end + alt RED_TEXT(no_matching_rules_were_hit) + autonumber 11 + proxy_bean -> record_impl:get_default_implementation_annotated_via_primary_msg + record_impl -> proxy_bean: bean_impl_invoke_method_return_msg + proxy_bean -> logic_exec: bean_impl_invoke_method_return_msg + end +end +@enduml +``` diff --git a/doc/img/README.md b/doc/img/README.md new file mode 100644 index 0000000..e69de29 diff --git a/doc/img/idea.png b/doc/img/idea.png deleted file mode 100644 index be834998198e172a6ff4be57101c687ac178198c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113109 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≤*LaB;hix9pogJzD}WQL#NwezH4WlHYnL`r%YlB34!=6l*1o)mN#3a8 zc-q>X*SbAH*~1L(m$hsAFzSMM5%_XZO@m z0aJ7E7fUn%TD5j%pMk>vwqi%ajUTWiNGg+i=3X7bbix}L(QolMt$-*dm~O z4mq_}RaI3?WT)|wZ35`yJj)N5h}e*T!01KiDMp~;Jpux>nnI$V?{n~@E*(&d53d1q4WT0P(n~M|0p! zgBc$yt7AJ`BKMbfSI33f*>p2(+f1B*rNqe<_2J^4{0O;dc)t%$Cv2dW{c>fhP z{q$uDj9KF(024*Hv4M`+UBdwVKVWd#tOw86 zph;ul;eGZ@`rO~IvdNX!-PP5l`dq(AgOuGs#s;XED}fhFx$+T*qAoKW>_WEvi4yOQ z0jCSYeq}foF>@Ul_IYBCCMZeF+gV(^Rr>xC1k_6)m#>fd=yp|ZS03&x0Rz(dy@_dn zniWqhOYPH3wZ+&|!pTu#XuT8M#WGz#Z@dm0Glk)zJzmsGn^9 z#`r`=N!e_c2UI}<>lE}kuT}_x3@||fmNhrGgUHB8eIlJVmk7X;78nrVC^_g-^C;sF z8ve+L!5)qZc>{PZ;z$55P=uOu^8YT7rRtW7|LpJMWukg3T8aZh1IYC)Hn87`zXjsA z_*Ej{JQ|g{(MX%Du~TPIf|0W6+4e+}0&6jp!ZrzbkP_cN+y|<(0q&73ai0pn#-f=n zkUI?gg(V%*aShn;z8RFtr2zp}Ra+Zc)fI2udYK!bb#!^Oz7lYPOH^j~{lhcC8Hmc8 z!3OY|Hfg z`E!7;SG&w|4YGihFWN$&xYVE7^pz3?XpVtRfIDCv1S;kBP@4V~2Lf;)0*<|OQBV78 zY;XiJ;0aU##ayle#vCWY?zH@TMk2tJR%YJXpbBpEzi`FCz)

$fztgCp&?duf_0x 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 z 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 record_impl : record_impl_msg - record_impl -> proxy_bean: create_proxy_msg - proxy_bean -> start_success:start_success_msg -end - -group logic_exec_group_name - autonumber - logic_exec -> proxy_bean:logic_exec_msg - proxy_bean -> record_impl:get_impl_msg - record_impl -> proxy_bean: parse_condition_rule - loop loop_bean_impl_msg - proxy_bean -> jexl_engine: jexl_engine_create_msg - proxy_bean -> jexl_engine: jexl_engine_context_msg - proxy_bean -> jexl_engine: jexl_engine_context_reg_msg - proxy_bean -> jexl_engine: jexl_engine_eval_msg - jexl_engine -> proxy_bean: jexl_engine_eval_result - alt script_eval_true_msg - autonumber - proxy_bean -> record_impl: bean_impl_invoke_method_msg - record_impl -> proxy_bean: bean_impl_invoke_method_return_msg - proxy_bean -> logic_exec: bean_impl_invoke_method_return_msg - else script_eval_false_msg - autonumber - record_impl -> record_impl: script_eval_false_continue_msg - end - end - alt no_matching_rules_were_hit - autonumber - proxy_bean -> record_impl:get_default_implementation_annotated_via_primary_msg - record_impl -> proxy_bean: bean_impl_invoke_method_return_msg - proxy_bean -> logic_exec: bean_impl_invoke_method_return_msg - end -end -@enduml -``` diff --git a/pom.xml b/pom.xml index 8b13f85..ba400a7 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ plus.jdk spring-smart-ioc-starter - 1.0.0 + 1.0.2 spring-smart-ioc-starter diff --git a/src/main/java/plus/jdk/smart/ioc/global/Evalable.java b/src/main/java/plus/jdk/smart/ioc/global/Evalable.java new file mode 100644 index 0000000..5cacc1a --- /dev/null +++ b/src/main/java/plus/jdk/smart/ioc/global/Evalable.java @@ -0,0 +1,8 @@ +package plus.jdk.smart.ioc.global; + +public interface Evalable { + /** + * Execute the specified script and return the results。 + */ + Object eval(String script); +} diff --git a/src/main/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactory.java b/src/main/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactory.java index 46fb612..8e84fb5 100644 --- a/src/main/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactory.java +++ b/src/main/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactory.java @@ -36,12 +36,25 @@ public class SmartIocSelectorFactory { */ private final GlobalSmartIocContext globalSmartIocContext; + /** + * Jexl expression engine for parsing and executing conditional expressions. + */ + private final JexlEngine jexlEngine; + /** * Create a new SmartIocSelectorFactory instance. */ public SmartIocSelectorFactory(ApplicationContext applicationContext, GlobalSmartIocContext globalSmartIocContext) { this.applicationContext = applicationContext; this.globalSmartIocContext = globalSmartIocContext; + JexlFeatures jexlFeatures = new JexlFeatures() + // Disable execution of loop statements + .loops(false) + // Disable modification of global variables + .sideEffectGlobal(false) + // Disable side effects, i.e. do not allow expressions to modify any variables (global or local) + .sideEffect(false); + this.jexlEngine = new JexlBuilder().features(jexlFeatures).create(); } /** @@ -65,25 +78,18 @@ protected void registerSdiDefinition(BeanDescriptor beanDescriptor) { * commons-jexl */ public Object evalExpression(String expression, Map params, String beanName, String methodName) { - StopWatch stopWatch = new StopWatch(); + StopWatch stopWatch = new StopWatch(expression); stopWatch.start(String.format("{%s}-{%s}", expression, params)); - JexlFeatures jexlFeatures = new JexlFeatures() - // 禁止执行循环语句 - .loops(false) - // 禁止修改全局变量 - .sideEffectGlobal(false) - // 禁用副作用,即不允许表达式对任何变量(全局或局部)进行修改 - .sideEffect(false); - Properties properties = new Properties(); - properties.put("beanName", beanName); - properties.put("methodName", methodName); - JexlEngine jexl = new JexlBuilder().features(jexlFeatures).create(); JexlContext context = new MapContext(); context.set("args", params); context.set("random", new Random()); + Map properties = new HashMap<>(); + properties.put("beanName", beanName); + properties.put("methodName", methodName); context.set("current", properties); context.set("global", globalSmartIocContext.getGlobalProperties()); - Object result = jexl.createExpression(expression).evaluate(context); + context.set("jexl", (Evalable) script -> evalExpression(script, params, beanName, methodName)); + Object result = jexlEngine.createExpression(expression).evaluate(context); stopWatch.stop(); log.info("evalExpression {}, cost {}ms, {}", expression, stopWatch.getTotalTimeMillis(), stopWatch.prettyPrint()); return result; diff --git a/src/test/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactoryTest.java b/src/test/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactoryTest.java index ab802e5..c8e48b2 100644 --- a/src/test/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactoryTest.java +++ b/src/test/java/plus/jdk/smart/ioc/global/SmartIocSelectorFactoryTest.java @@ -2,6 +2,7 @@ import cn.hutool.core.date.StopWatch; import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; @@ -25,18 +26,23 @@ public class SmartIocSelectorFactoryTest { @Resource private SmartIocSelectorFactory smartIocSelectorFactory; + /** + * Global intelligent IOC context instance, used to obtain and manage global configuration information. + */ + @Resource + private GlobalSmartIocContext globalSmartIocContext; + @Test public void evalExpressionTest() { - DispatchContext dispatchContext = new DispatchContext() {}; - dispatchContext.setName("jack"); - StopWatch stopWatch = new StopWatch(); - stopWatch.start(); - String expression = "dispatchContext.getName() == \"jack\".substring(1)"; - Map params = new HashMap<>(); - params.put("dispatchContext", dispatchContext); - - Object object = smartIocSelectorFactory.evalExpression(expression, params, "testBean", "name"); - stopWatch.stop(); - log.info("evalExpression cost {}ms", stopWatch.getTotalTimeMillis()); + // Test the magic jexl.eval() function + Map args = new HashMap<>(); + + globalSmartIocContext.registerGlobalVar("testScript", "1 + 2"); + Assert.assertEquals(smartIocSelectorFactory.evalExpression("jexl.eval(global.testScript)", args, null, null), 3); + + args.put("c", 4); + globalSmartIocContext.registerGlobalVar("testScript", "1 + 2"); + Assert.assertEquals(smartIocSelectorFactory.evalExpression("jexl.eval(global.testScript) < args.c", args, null, null), true); + Assert.assertEquals(smartIocSelectorFactory.evalExpression("jexl.eval(global.testScript) > args.c", args, null, null), false); } } \ No newline at end of file diff --git a/src/test/java/plus/jdk/smart/ioc/service/DegradeByGlobalConfigTest.java b/src/test/java/plus/jdk/smart/ioc/service/DegradeByGlobalConfigTest.java index 24e2b47..dfd5ca6 100644 --- a/src/test/java/plus/jdk/smart/ioc/service/DegradeByGlobalConfigTest.java +++ b/src/test/java/plus/jdk/smart/ioc/service/DegradeByGlobalConfigTest.java @@ -8,11 +8,13 @@ import org.springframework.test.context.junit4.SpringRunner; import plus.jdk.smart.ioc.TomcatLauncher; import plus.jdk.smart.ioc.global.GlobalSmartIocContext; +import plus.jdk.smart.ioc.global.SmartIocSelectorFactory; import plus.jdk.smart.ioc.model.RecallContext; import plus.jdk.smart.ioc.model.RecallResult; import plus.jdk.smart.ioc.service.degrade.MaterialRecallService; import javax.annotation.Resource; +import java.util.HashMap; @Slf4j @RunWith(SpringRunner.class) @@ -31,6 +33,12 @@ public class DegradeByGlobalConfigTest { @Resource private GlobalSmartIocContext globalSmartIocContext; + /** + * Factory class instance for obtaining and selecting the appropriate IoC container。 + */ + @Resource + private SmartIocSelectorFactory smartIocSelectorFactory; + @Test public void degradeTest() { // Tests if qps <= 1000 normally uses the normal vector recall implementation to return recommended content diff --git a/src/test/java/plus/jdk/smart/ioc/service/SmartFlowByMethodArgsTest.java b/src/test/java/plus/jdk/smart/ioc/service/SmartFlowByMethodArgsTest.java index bb82fe1..03f7bdf 100644 --- a/src/test/java/plus/jdk/smart/ioc/service/SmartFlowByMethodArgsTest.java +++ b/src/test/java/plus/jdk/smart/ioc/service/SmartFlowByMethodArgsTest.java @@ -6,6 +6,7 @@ import org.springframework.test.context.junit4.SpringRunner; import plus.jdk.smart.ioc.TomcatLauncher; import plus.jdk.smart.ioc.global.Advised; +import plus.jdk.smart.ioc.global.SmartIocSelectorFactory; import plus.jdk.smart.ioc.model.DispatchContext; import plus.jdk.smart.ioc.service.small.flow.SmsDispatchService; import plus.jdk.smart.ioc.service.small.flow.impl.AlibabaCloudSmsDispatchService;