Tag: groovy

使用Java或Groovy为SQLite编写用户定义的SQL函数?

使用SQLite,可以使用C api或PHP轻松添加用户定义的SQL函数。 但它是否也可以使用Java或Groovy?

了解Groovy / Grails类加载器泄漏

昨天我将我的第一个Grails(2.3.6)应用程序部署到开发服务器并开始监控它。 我刚刚得到一个自动监视器,说明CPU被固定在这台机器上,所以我连接到它。 我跑了top ,发现是我的Java应用程序的PID固定服务器。 我也注意到内存是40%。 几秒钟后,CPU停止固定,降至正常水平,内存恢复到~20%范围内。 经典主要GC。 在收集的时候,我做了堆转储。 在GC之后,我在JVisualVM中打开了转储,看到大部分内存都是为org.codehaus.groovy.runtime.metaclass.MetaMethodIndex.Entry类分配的。 总共有近250,000个这样的实例,占用了大约25 MB的内存。 我用Google搜索了这个课程并看了一下它是非常有帮助的Javadocs 。 所以我仍然不知道这门课的作用。 但谷歌搜索它还带来了大约十几篇涉及这个类的相关文章(其中一些是SO问题)和Grails / Groovy应用程序的PermGen / classloader泄漏。 虽然看起来我的应用程序确实用GC清理了这些250K实例,但仍然令人不安的是它有如此多的实例,并且GC将CPU固定超过5分钟。 我的问题: 什么是这个类,Groovy用它做什么? 有人可以向我解释这个答案吗? 为什么-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled帮助解决这个特殊问题? 为什么这个课程对PermGen特别麻烦?

将文件转换为MultiPartFile

有没有办法将File对象转换为MultiPartFile? 这样我就可以将该对象发送给接受MultiPartFile接口对象的方法? File myFile = new File(“/path/to/the/file.txt”) MultiPartFile ….? def (MultiPartFile file) { def is = new BufferedInputStream(file.getInputStream()) //do something interesting with the stream }

如何在java或groovy中查找两个日期之间的天数?

我有一个方法,它使用以下逻辑来计算天数之间的差异。 long diff = milliseconds2 – milliseconds1; long diffDays = diff / (24 * 60 * 60 * 1000); 但我想要的是, 9th feb 2011 to 19th feb 2011应该返回我11天,无论第二或毫秒考虑。 我怎样才能做到这一点?

如何使用java驱动程序更新mongo db中的文档字段?

参考文献: http://www.mongodb.org/display/DOCS/Java+Tutorial 仍然是mongo db的新手,但我正在尝试更新集合中现有文档的一部分……遗憾的是,上面的链接没有更新示例。 基本上,我只是希望能够: 向文档添加新字段 将文档的现有字段更新为新值 这是我的代码(Grails + Groovy + Java + MongoDB + java驱动程序): def shape = mongo.shapes.findOne(new BasicDBObject(“data”, “http://www.foo.com”)); // get the document mongo.shapes.update(new BasicDBObject(“_id”, shape._id), new BasicDBObject(“isProcessed”, 0)); // add a new “isProcessed” field set to 0 mongo.shapes.update(new BasicDBObject(“_id”, shape._id), new BasicDBObject(“data”, “http://www.bar.com”)); 这几乎破坏了整个对象……我可能会尝试修改原始形状对象然后在其上运行更新。 但在那之前, 是否有人有更新单个字段(而不是整个文档)的经验? 编辑: 我只是尝试了它,并且能够通过发送整个对象以及新的和/或更新的字段来成功更新。 我想知道驱动程序是否足够智能,只更新最小的更改子集,或者只是盲目更新整个事物? (在下面的例子中,它是仅仅通过电线或整个形状文档更新foo字段?) 码: […]

如何为所有控制器配置默认的@RestController URI前缀?

我知道您可以在application.properties设置server.contextPath来更改根上下文。 另外,我可以在Spring Boot的应用程序配置中添加一个额外的上下文,如下例(在Groovy中),为根上下文的URL映射添加“/ api”: @Bean ServletRegistrationBean dispatcherServlet() { ServletRegistrationBean reg = new ServletRegistrationBean(new DispatcherServlet(), “/”) reg.name = “dispatcherServlet” reg.addInitParameter(“contextConfigLocation”, “”) reg.addUrlMappings(“/api/*”) reg.loadOnStartup = 2 reg } } 我正在尝试为Web服务调用提供一个单独的基本URI“/ api”,我可以利用它来保证安全性等。但是使用上述方法将意味着我可以通过以下方式访问我的任何URI,无论是否使用Web服务“/”或“/ api”,并没有提供具体的隔离。 是否有人知道使用配置为所有@RestController设置基本路径的更好方法,而不必使用/ api /正式为每个控制器添加前缀? 如果我被迫手动为每个控制器的URI添加前缀,则可能会错误地省略它并绕过我特定于Web服务的安全措施。 这是Stack Overflow中对同一类型问题的引用,但从未完全回答过: Spring Boot:为RestControllers配置url前缀

为什么我会得到exceptionjava.lang.NoClassDefFoundError org / codehaus / groovy /?

我刚刚尝试了Jasper Report,我正在关注这个网站的教程 我也下载了示例源,然后运行它并没有错误。 但是当我使用iReport创建自己的报告时,编译它,并将.jasper文件添加到我的项目中。 我运行程序时有exception : Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/callsite/CallSiteArray at report2_1343895135169_749208.$createCallSiteArray(calculator_report2_1343895135169_749208) at report2_1343895135169_749208.$getCallSiteArray(calculator_report2_1343895135169_749208) at report2_1343895135169_749208.(calculator_report2_1343895135169_749208) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.loadEvaluator(JRAbstractJavaCompiler.java:112) at net.sf.jasperreports.engine.design.JRAbstractCompiler.loadEvaluator(JRAbstractCompiler.java:333) at net.sf.jasperreports.engine.JasperCompileManager.getEvaluator(JasperCompileManager.java:265) at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:457) at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:379) at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:88) at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:103) at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:61) at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:82) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:634) […]

动态修改字段注释值

是否可以在运行时更改字段注释值? 我可以访问这些值,但无法找到更改它们的方法。 可以访问: Article.class.declaredFields.find {it.name=”annotatedField”}.declaredAnnotations

将进程重定向到stdout

我想在Groovy程序中执行foo.bat并将生成的进程’输出重定向到stdout。 Java或Groovy代码示例都可以。 foo.bat可能需要几分钟才能运行并产生大量输出,因此我希望在生成后立即看到输出,而不是必须等到进程完成后才能立即看到所有输出。

如何在java中运行groovy脚本?

我有一个groovy脚本,我想在java中执行它。 有人可以向我提供有关如何实现这一目标的进一步文档/示例吗?