3

我在我的 Grails 应用程序中安装了“executor”插件来做一些简单的异步处理;我没有使用 Hibernate 或任何花哨的持久性。根据插件的文档,可以在这里找到https://github.com/basejump/grails-executor,设置非常简单,只需添加以下内容resources.groovy,我应该很好......

//resources.groovy
    executorService( PersistenceContextExecutorWrapper ) { bean->
        bean.destroyMethod = 'destroy'
        persistenceInterceptor = ref("persistenceInterceptor")
        executor = Executors.newCachedThreadPool()
    }

我还没有尝试在我的代码中使用任何异步构造,但是当我启动我的 grails 应用程序时,我看到以下错误......

Cannot resolve reference to bean 'persistenceInterceptor' while setting bean property 'persistenceInterceptor';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'persistenceInterceptor' is defined

该错误是有道理的,因为我没有连接任何名为persistenceInterceptorin 的bean resources.groovy,但根据插件文档,我不必这样做。我是否必须编写一个实现 PersistenceContextInterceptor 接口的 groovy 类,并将其连接为“persistenceInterceptor”bean?在文档的设置部分中,没有提到这一点..

4

3 回答 3

1

我想通了……

persistenceInterceptor 由执行器插件配置引用,因此一旦将插件添加到 Grails 项目,您的代码必须在 resources.groovy 中连接 PersistenceContextInterceptor 的实例。我模拟了一个类来实现接口,只是为了暂时解决这个问题,它工作得很好。

//resources.groovy
 persistenceInterceptor(  com.cache.DefaultCacheInterceptor){
}
于 2011-12-13T15:26:59.700 回答
0

实际上,设置不需要您向 resources.groovy 添加任何内容 - 从文档中,该代码块已经是默认设置。我建议从 resources.groovy 中删除所有自定义代码,除非您需要覆盖默认值并创建自定义线程池。

该插件设置了一个名为 executorService 的 Grails 服务 bean,因此您实际上无需执行任何操作。它委托给 Java ExecutorService(不要与 Grails 服务混淆)接口的实现,因此请阅读该接口以获取有关您可以使用 executorService 做什么的更多信息。它基本上包装了另一个线程池ExecutorService。默认情况下,它使用 java Executors 实用程序类来设置注入的线程池 ExecutorService 实现。默认的 Grails executorService 配置如下所示

于 2012-02-20T19:30:34.823 回答
-1

我相信还有更合适的解决方案。尝试在resources.groovy文件中添加以下行:

springConfig.addAlias 'persistenceInterceptor', 'mongoPersistenceInterceptor'
于 2016-09-12T13:36:35.257 回答