为Grails quartz作业创建自定义范围

为Grails quartz作业创建自定义范围,grails,Grails,有人在Grails中创建了自定义范围吗 我是在BootStrap.groovy(注入的grailsApplication)中这样做的: grailsApplication.mainContext.getBeanFactory().registerScope('simpleThread',new SimpleThreadScope()) 在我的spring/resources.groovy中,我有: myContext(MyContext) { bean -> bean.scope

有人在Grails中创建了自定义范围吗

我是在BootStrap.groovy(注入的grailsApplication)中这样做的:

grailsApplication.mainContext.getBeanFactory().registerScope('simpleThread',new SimpleThreadScope())

在我的spring/resources.groovy中,我有:

myContext(MyContext) { bean ->
    bean.scope = 'simpleThread'
}
然后将其注入到我的所有域对象中

这似乎有效。。。但是有关于使用SimpleThreadScope的对象未被销毁的警告。。。我想知道这是否安全

我这样做是因为我不能使用请求范围,因为我们启动了Quartz作业(使用Grails插件),请求被销毁


我们在常规web请求和使用Quartz的异步web请求中都使用此上下文对象…

为什么不能使用会话范围?您可以定义服务并将其范围定义到会话。然后,在控制器中,您可以使用必要的参数调用服务。您可能不需要请求对象,因为您将检索到所有参数。希望helpsWell,会话作用域不能工作,原因有二:对不起,它在我身上超时;-)谢谢你的建议,但我不想使用session,原因有几个(一个是让用户能够在同一浏览器中使用多个选项卡,而不会产生奇怪的副作用)。此外,将参数传递给服务也不起作用,因为我需要将信息注入域对象(一个我想设置一次的变量,而不是我想必须设置到每个创建的对象或传递到每个方法中的变量)——这似乎是“上下文”信息的一种相当常见的做法。Fwiw,解决方案似乎有效,只是不知道有没有人试过。如果其他人可以使用它,在作业结束时,我会这样清理:ConfigurableBeanFactoryConfigurableBeanFactory=grailsApplication.mainContext.getBeanFactory()ConfigurableBeanFactory.destroyScopedBean('myContext'))