解决经常变化业务逻辑

xiaoxiao2021-02-28  47

0 概述

在实际工作中由于业务是一直在不断变化中,开发工作者也要不断修改代码、测试、部署、发布。然而有时候某一块需要经常变动,这时候我们也要走前面的流程,这个时候开发效率就比较低。本文主要采用配置groovy来处理经常变化业务逻辑,当业务逻辑发生变化时候,只需要修改groovy脚本即可,这样可以极大的提高开发效率。

1 实例分析

pom 依赖

<dependencies> <!-- groovy --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency> </dependencies>

//ScriptExecutor 编译脚本和执行类

import groovy.lang.GroovyClassLoader; import groovy.lang.Script; import java.io.IOException; import java.util.Map; /** * Created by hsc on 17/8/6. */ public class ScriptExecutor { private static final String FUNCTION_NAME = "execute"; private Script scriptObject; public Object execute(Map<String, Object> input) { return scriptObject.invokeMethod(FUNCTION_NAME, input); } @SuppressWarnings("unchecked") public synchronized boolean compile(String script, String key) { GroovyClassLoader loader = new GroovyClassLoader(); try { //实际使用时候可以做一个缓存 Class<Script> clazz = (Class<Script>) loader.parseClass(script, key); scriptObject = clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); return false; } finally { try { loader.close(); } catch (IOException e) { e.printStackTrace(); } } return true; } }

//groovy 脚本

package groovy; import groovy.transform.CompileStatic @CompileStatic public def String execute(Map<String, Object> map) { //经常变化的逻辑 放在这里除了 if (map != null && map.isEmpty()) { map.put("test", "test"); } return "test"; }

2 测试

import com.alibaba.fastjson.JSON; import java.util.HashMap; import java.util.Map; /** * Created by hsc on 17/8/6. */ public class Test { public static void main(String[] args) { // 这个脚本可以放在配置中心&或者DB中等 String script = "package groovy;\n" + "\n" + "import groovy.transform.CompileStatic\n" + "\n" + "@CompileStatic\n" + "public def String execute(Map<String, Object> map) {\n" + " if (map != null && map.isEmpty()) {\n" + " map.put(\"test\", \"test\");\n" + " }\n" + " return \"test\";\n" + "}"; Map<String,Object> map=new HashMap<String, Object>(); ScriptExecutor scriptExecutor = new ScriptExecutor(); if (!scriptExecutor.compile(script, "test")) { System.out.print("编译失败"); return; } System.out.print(scriptExecutor.execute(map)); System.out.print(JSON.toJSON(map)); } }
转载请注明原文地址: https://www.6miu.com/read-56612.html

最新回复(0)