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());
}
}
}

Java 调用 groovy 脚本文件,groovy 访问 MongoDB的更多相关文章

  1. Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    依赖包(附件有下载): 包名 类型 操作系统 luajava-1.1.jar jar ALL libluajava-1.1.so .so linux luajava-1.1.dll .dll wind ...

  2. (转)java调用python脚本

    这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...

  3. 通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  4. java调用shell脚本小demo

    复制指定文件cpp.sh: [root@localhost soft]# vim cpp.sh#!/bin/bash name="$1"\cp /home/soft/test/${ ...

  5. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  6. java调用python脚本并向python脚本传递参数

    1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...

  7. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  8. java调用dll/so文件

    大家都知道用C++编写的程序如果用于windows使用则编译为xxx.dll文件,如果是Linux使用则编译为libxxx.so文件.下面将java调用dll/so文件的方法粘出来方便下次使用.此处使 ...

  9. Java调用Lua脚本(热载实现)

    前言: Lua作为解析执行的脚本语言, 往往是易变逻辑编写的首选语言, 尤其是在游戏领域. C/C++和Lua的结合, 往往了标配. 比如Redis, Nginx其对Lua的支持, 也是杠杠的. 当然 ...

随机推荐

  1. CSS 背景实例

    CSS 背景属性属性 描述background 简写属性,作用是将背景属性设置在一个声明中.background-attachment 背景图像是否固定或者随着页面的其余部分滚动.background ...

  2. Docker swarm集群搭建教程

    一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...

  3. 《linux内核设计与实现》第二章

    第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/ ...

  4. 《Linux内核分析》第三周:Linux系统启动过程

    杨舒雯 原创作品转载请注明出处 Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验--使用gdb跟踪调试内 ...

  5. Java中的基本数据据类型

    1.整数类型 类型 字节数 表示范围 byte 1 -128~127 short 2 -32768 ~ 32767 int 4 -2147483648~2147483647 long 8 -92233 ...

  6. Daily Scrum - 11/13

    时间:3:00pm - 3:30pm 今天小组例会主要是任烁分享他对WP源码的code review,通过分析与讨论我们了解了背单词模块的主要类(主要是词和单词本),取词方式(调用数据库接口),算法( ...

  7. Github作为图床的一个小坑

    Github作为图床的一个小坑 前言 听了少铭同学建议把github作为图床,结果遇到了一个小坑,总是显示不出来图片. 问题描述与解决 形如下的链接是显示不出来的: https://github.co ...

  8. struts2中的方法的调用

    转载:http://blog.csdn.net/hephec/article/details/41808585 在Struts2中方法调用概括起来主要有三种形式: 第一种方式:指定method属性 & ...

  9. Android控件第2类——ImageView

    1.ImageView不仅仅可以显示图片,ImageView可以显示任何Drawable对象. adjustViewBounds:设置ImageView是否调整自己的边界来保证图片的长宽比. crop ...

  10. 平时在PHP编码时有没有注意到这些问题

    编出一手好代码,这个是需要你在平时开发中日积月累的,平时如果你有注意到以下的那些代码的编码,那么祝贺你,你在技能提升这方面已经垫下了一些基础,编写出一手好代码,说白了就是你特么注意到性能这块的问题,代 ...