Java动态执行可配置的逻辑
来源:互联网 发布:数据库管理员简历 编辑:程序博客网 时间:2024/06/06 00:56
某些场景下Java系统里需要动态执行一段配置在数据库中(也可以是其他存储)的逻辑,仅仅基于Java是无法完成的,但可以通过集成Groovy来实现这个效果,尝试过程如下:
1)在数据库中配置脚本,表结构随意定义,例子如下:
2)Java中动态调存在于数据库里的groovy脚本(存在上表中的script字段里)
- File f = null;
- BufferedWriter bw = null;
- Connection con = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- con = DriverManager.getConnection("jdbc:mysql://10.20.168.42:3306/cutemock","root","111111");
- Statement stmt = con.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT script FROM mock where service='"+
- serviceName+"' and method='"+methodName+"'");
- if(rs.next()){
- LOGGER.info("start run script:"+rs.getString("script"));
- f = File.createTempFile("gse", ".groovy");
- bw = new BufferedWriter(new FileWriter(f));
- bw.write(rs.getString("script"));
- bw.flush();
- Binding binding = new Binding();
- GroovyScriptEngine gse = new GroovyScriptEngine(f.getParentFile().getName());
- Object result = gse.run(f.getName(), binding);
- hsfResponse.setAppResponse(result);
- return hsfResponse;
- }
- } catch (Exception e) {
- LOGGER.error("run groovy error", e);
- }finally{
- try {
- if(bw!=null){
- bw.close();
- }
- if(f!=null){
- f.delete();
- }
- if(con!=null){
- con.close();
- }
- } catch (Exception e2) {
- // TODO: handle exception
- }
- }
上面代码比较简单,关键在于两点:
1)通过GroovyScriptEngine来执行groovy脚本
2)从数据库里load出groovy代码,并放入临时文件里,使其成为一段可执行的.groovy文件
- Java动态执行可配置的逻辑
- Java动态执行可配置的逻辑
- 利用自定义ClassLoader和接口逻辑后台可刷新缓存实现java-web项目的动态发布
- Java Web开发构想(3) -- 可配置、可编程、可热部署、脚本逻辑 vs XML Tag逻辑
- Java web 开发构想[五] 可配置、可编程、可热部署、脚本逻辑 vs XML Tag逻辑
- Mac 配置可动态切换的JDK
- 动态执行的方法java
- Java动态代理-实现类似spring的可配置的AOP框架
- JAVA操作Excel 可配置,动态 生成复杂表头
- 如果动态的执行java脚本,这个在脚本公式配置的时候很方便
- 18.1.1 SHTTPD启动参数可动态配置的需求
- Spark逻辑图的执行
- Java设计一个可追踪是否成功执行的方法
- HTML5游戏可动态下载对话框布局及逻辑
- 一个自动回调+可动态配置php参数+可暂停/继续的框架
- 动态执行Java脚本
- java方法动态执行
- Java动态编译执行
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式(二)
- terminal 不能敲 s 键
- REDHAT解决apt-get问题
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式(三)
- 黑马程序员-基础-IO流1
- Java动态执行可配置的逻辑
- 动态更改JVM里的class
- tar.gz文件的安装
- BST中所有结点之和(设结点个数为n,且中序遍历为等差数列)
- 九度oj1081递推数列的算法
- 通通WPF随笔(3)——艺术二维码素材生成器
- ubuntu下的wireshark编译安装
- cocos2d-x学习之路(8)--重构项目
- 黑马程序员-基础-IO流2