• Java 调用 groovy 脚本文件,groovy 访问 MongoDB


    groovy 访问 MongoDB 示例:

    shell.groovy

    package db
    
    import com.gmongo.GMongoClient
    import com.mongodb.BasicDBObject
    import com.mongodb.MongoCredential
    import com.mongodb.ServerAddress
    
    /**
     * 本地无密 mongodb 数据库连接
     */
    def connect() {
        GMongoClient client = new GMongoClient(new ServerAddress('127.0.0.1',50513))
        return client
    }
    
    /**
     * SSH mongodb 数据库连接
     */
    def connectSSH() {
        //以下这两行是针对包含用户名和密码配置的数据库的。
        MongoCredential credentials = MongoCredential.createMongoCRCredential('root','xy', 'pass' as char[])
        //MongoClientOptions options = MongoClientOptions.builder().connectTimeout(1000)
    
        //创建一个Client连接,如果是认证的则使用下面的这一行
        GMongoClient client = new GMongoClient(new ServerAddress('10.101.114.108',22), [credentials])
        return client
    }
    
    def topics(map) {
    
        def DB = connect().getDB('xy')
    
        /*def sl = map['$gte']
        def el = map['$lte']*/
        //查询条件
        BasicDBObject object = new BasicDBObject('timestamp',new BasicDBObject(map))
        println(object.toString())
    
        println(DB.getCollection('topics').count(object))
    
        //println(DB.getCollection('topics').count())
    
    }
    
    def topic_tip(map) {
    
        def DB = connect().getDB('xy')
    
        //查询条件
        BasicDBObject object1 = new BasicDBObject('$match',new BasicDBObject(map))
        BasicDBObject object2 = new BasicDBObject('$group',new BasicDBObject('_id',null).append('num_tutorial',new BasicDBObject('$sum','$kd_money')))
    
        //聚合查询
        //db.getCollection('topic_tip').aggregate([{$match:{ 'timestamp' : { '$gte' : 1376065109781 , '$lte' : 1576065109781}}},{$group : {_id : null, num_tutorial : {$sum : '$kd_money'}}}])
        println(DB.getCollection('topic_tip').aggregate(object1,object2))
    
    }
    
    def currency_log(map) {
    
        def DB = connect().getDB('xy')
    
        //查询条件
        BasicDBObject object1 = new BasicDBObject('$match',new BasicDBObject(map))
        BasicDBObject object2 = new BasicDBObject('$group',new BasicDBObject('_id',null).append('num_tutorial',new BasicDBObject('$sum','$kd_money')))
    
        //聚合查询
        //db.getCollection('currency_log').aggregate([{$match:{ "currency_time" : { "$gte" : 1504368000000 , "$lte" : 1504454399000}}},{$group : {_id : "$currency_type", num_tutorial : {$sum : "$currency_money"}}}])
        println(DB.getCollection('currency_log').aggregate(object1,object2))
    
    }
    

    java 调用 shell.groovy 文件

    package test;
    
    import groovy.lang.GroovyClassLoader;
    import groovy.lang.GroovyObject;
    import javafx.application.Application;
    import javafx.stage.Stage;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Shell extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) {
            try {
    
                GroovyClassLoader loader = new GroovyClassLoader();
                Class groovyClass = loader.parseClass(new File(Shell.class.getClassLoader().getResource("db/shell.groovy").getPath()));
                GroovyObject object = (GroovyObject) groovyClass.newInstance();
    
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
                String[] timeStart = new String[]{"2017-08-28 00:00:00","2017-08-29 00:00:00","2017-08-30 00:00:00","2017-08-31 00:00:00"};
                String[] timeEnd = new String[]{"2017-08-28 23:59:59","2017-08-29 23:59:59","2017-08-30 23:59:59","2017-08-31 23:59:59"};
    
                for (int i=0 ;i<7; i++) {
                    Date start = format.parse(timeStart[i]);
                    Date end = format.parse(timeEnd[i]);
    
                    Map<String,Long> params = new HashMap<>();
                    params.put("$gte",start.getTime());
                    params.put("$lte",end.getTime());
    
                    // topics 是 shell.groovy 中的方法名,params 是传给 topics 的参数,执行下面语句完成 topics 方法脚本的调用
                    object.invokeMethod("topics",params);
                }
    
                /*GroovyScriptEngine engine = new GroovyScriptEngine(Shell.class.getClassLoader().getResource("db").getPath());
                Binding binding = new Binding();
                binding.setVariable("language","Groovy");
                engine.run("studenttopicdata.groovy",binding);*/
    
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Exception e = " + e.toString());
            }
        }
    }
    
    


  • 相关阅读:
    Laravel + Vue 之 OPTIONS 请求的处理
    Vue2.0 keep-alive 组件的最佳实践
    Vue.js 登录注册实现
    数仓项目04:环境搭建(MysqlHA+Hive)
    CentOS7_JDK安装和环境变量配置
    改环境变量改出问题了,vi,ls这些命令都不能用了,怎么办
    CentOS7配置网络
    curl命令下载jdk
    CentOS7设置IP地址
    ODPS
  • 原文地址:https://www.cnblogs.com/molashaonian/p/8763337.html
Copyright © 2020-2023  润新知