`
wxyfighting
  • 浏览: 191876 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java动态执行可配置的逻辑

 
阅读更多

某些场景下Java系统里需要动态执行一段配置在数据库中(也可以是其他存储)的逻辑,仅仅基于Java是无法完成的,但可以通过集成Groovy来实现这个效果,尝试过程如下:

1)在数据库中配置脚本,表结构随意定义,例子如下:

2)Java中动态调存在于数据库里的groovy脚本(存在上表中的script字段里)

  1. Filef=null;
  2. BufferedWriterbw=null;
  3. Connectioncon=null;
  4. try{
  5. Class.forName("com.mysql.jdbc.Driver");
  6. con=DriverManager.getConnection("jdbc:mysql://10.20.168.42:3306/cutemock","root","111111");
  7. Statementstmt=con.createStatement();
  8. ResultSetrs=stmt.executeQuery("SELECTscriptFROMmockwhereservice='"+
  9. serviceName+"'andmethod='"+methodName+"'");
  10. if(rs.next()){
  11. LOGGER.info("startrunscript:"+rs.getString("script"));
  12. f=File.createTempFile("gse",".groovy");
  13. bw=newBufferedWriter(newFileWriter(f));
  14. bw.write(rs.getString("script"));
  15. bw.flush();
  16. Bindingbinding=newBinding();
  17. GroovyScriptEnginegse=newGroovyScriptEngine(f.getParentFile().getName());
  18. Objectresult=gse.run(f.getName(),binding);
  19. hsfResponse.setAppResponse(result);
  20. returnhsfResponse;
  21. }
  22. }catch(Exceptione){
  23. LOGGER.error("rungroovyerror",e);
  24. }finally{
  25. try{
  26. if(bw!=null){
  27. bw.close();
  28. }
  29. if(f!=null){
  30. f.delete();
  31. }
  32. if(con!=null){
  33. con.close();
  34. }
  35. }catch(Exceptione2){
  36. //TODO:handleexception
  37. }
  38. }

上面代码比较简单,关键在于两点:

1)通过GroovyScriptEngine来执行groovy脚本

2)从数据库里load出groovy代码,并放入临时文件里,使其成为一段可执行的.groovy文件

分享到:
评论

相关推荐

    Java运行环境的配置与表达式

    1、Java软件开发工具包(JSDK)的下载与安装 2、环境变量的设置 3、使用EditPlus编写源程序 ...5、使用java命令运行程序 6、声明不同数据类型的变量 7、了解变量的使用范围 8、使用关系运算符和逻辑运算符

    JAVA_API1.6文档(中文)

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

    Java 1.6 API 中文 New

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于...

    java api最新7.0

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于...

    java学习之SpringSecurity配置了登录链接无权限

    我已经将本次请求的url添加到忽略名单里面了,起始这些过滤器没有被执行,这就是问题原因所在,我们忽略的url没有生效。 先定位过滤器忽略指定URL得逻辑代码,是否存在问题 制定了正确的忽略URL,内置的过滤器不走,...

    JavaAPI1.6中文chm文档 part1

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    Java开发技术大全(500个源代码).

    leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper.java 小写字母转换成大写字母 lozengeStar.java 输出一个由*组成的菱形 multiplyTable.java 求乘法口诀表 narrowingConversion_1.java 缩减转换引发...

    hotswap-for-java-file.zip

    1、while(true)一直运行的逻辑,有可能热更失败,建议解决方法就是把大括号里面的放到一个方法里面执行 2、匿名内部类不能热更 3、不能修改类结构 4、不能修改方法签名 如果有问题,可以发送邮件到 379993761@...

    从Java走向Java+EE+.rar

    第5章 使用Java Servlet开发动态网页 65 5.1 Servlet的概念和生命周期 65 5.2 如何编写Servlet 67 5.3 使用Eclipse和Tomcat开发Servlet实例——输出字符串响应 72 5.4 小结 77 第6章 JSP——前后台更好地...

    JavaAPI中文chm文档 part2

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    Java类文件加密专家

    传统的Java程序加密的方式多为代码混迹方式,但是无论多么复杂的混迹方式,在使用Java代码反编译程序后还是可以看到代码的逻辑结构,这样并没有彻底的保护好您的代码。 Java 类文件加密专家通过分析Class文件的结构...

    java jdk-api-1.6 中文 chmd

    java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    IKExpression表达式解析器

    使其能在流程运行期获得同配置期一样灵活地对执行逻辑条件进行变更。经过扩展后的IK Expression还可以适用于各种常规业务系统的动态条件配置,如需要图形化配置应用的场合,或是模拟Excel电子表格的公式运算的场景。

    java 实现AOP

     JDK1.2以后提供了动态代理的支持,程序员通过实现java.lang.reflect.InvocationHandler接口提供一个执行处理器,然后通过java.lang.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被...

    java spring手写jdbcTemplate,实现查询多数据源数据。

    数据源可能是不同种类的:如sql server,oracl等等,一开始是用的配置实现,后来发现在项目运行中,可能需要动态的添加更多不同类型的数据源,所以最终的逻辑是将数据源配置在数据库中。

    生成可读取配置文件的独立运行jar程序IDEA模版工程

    根据文章创建的模版工程文件,下载后可直接编辑main方法,根据自己的需求自定义逻辑内容,编译后获取independent.jar文件,修改配置文件后,通过java -jar independent.jar 执行命令,正常执行。

    SOY Framework框架Java RCP编程(一)--配置开发环境

    将JettyLauncher作为java application运行,启动服务器,如不出现异常,则server项目配置成功。 打开client项目下的ApplicationLauncher.java文件,作为java application 运行,启动客户端。如果出现设置管理员界面,...

Global site tag (gtag.js) - Google Analytics