在实际工作中由于业务是一直在不断变化中,开发工作者也要不断修改代码、测试、部署、发布。然而有时候某一块需要经常变动,这时候我们也要走前面的流程,这个时候开发效率就比较低。本文主要采用配置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@CompileStaticpublic 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)); }}总结
以上是内存溢出为你收集整理的解决经常变化业务逻辑全部内容,希望文章能够帮你解决解决经常变化业务逻辑所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)