Java动态执行可配置的逻辑

来源:互联网 发布:数据库管理员简历 编辑:程序博客网 时间:2024/06/06 00:56

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

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

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

[java] view plaincopy
  1. File f = null;  
  2. BufferedWriter bw = null;  
  3. Connection con = 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.     Statement stmt = con.createStatement();  
  8.     ResultSet rs = stmt.executeQuery("SELECT script FROM mock where service='"+  
  9.                                      serviceName+"' and method='"+methodName+"'");   
  10.     if(rs.next()){  
  11.         LOGGER.info("start run script:"+rs.getString("script"));  
  12.           
  13.           
  14.         f = File.createTempFile("gse"".groovy");  
  15.         bw = new BufferedWriter(new FileWriter(f));   
  16.         bw.write(rs.getString("script"));  
  17.         bw.flush();  
  18.         Binding binding = new Binding();  
  19.         GroovyScriptEngine gse = new GroovyScriptEngine(f.getParentFile().getName());  
  20.         Object result = gse.run(f.getName(), binding);  
  21.         hsfResponse.setAppResponse(result);  
  22.         return hsfResponse;  
  23.     }  
  24. catch (Exception e) {  
  25.     LOGGER.error("run groovy error", e);  
  26. }finally{  
  27.     try {  
  28.         if(bw!=null){  
  29.             bw.close();  
  30.         }  
  31.         if(f!=null){  
  32.             f.delete();  
  33.         }  
  34.         if(con!=null){  
  35.             con.close();  
  36.         }  
  37.     } catch (Exception e2) {  
  38.         // TODO: handle exception  
  39.     }  
  40. }  

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

1)通过GroovyScriptEngine来执行groovy脚本

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

原创粉丝点击