Grails 如何在会话中存储quartz作业的结果?

Grails 如何在会话中存储quartz作业的结果?,grails,quartz-scheduler,grails-2.0,Grails,Quartz Scheduler,Grails 2.0,我已经在Grails2.1应用程序中安装了Quartz插件。每5分钟触发一个作业,该作业将计算一些数字。数字显示在每页的侧栏上。计算结果会经常更改,我的目标是当用户刷新屏幕时,他们可以在侧边栏上看到新结果。 现在,我的方法是向控制器发送ajax调用,从数据库中获取结果并在屏幕上呈现 是否有任何方法将作业的计算结果存储(缓存)到数据库以外的其他位置,以便我的视图可以使用它们,而无需在用户每次单击链接或刷新屏幕时执行查询 我考虑过会话,但不确定它是否可能超出正常的web请求,或者它是否是一个好的解决

我已经在Grails2.1应用程序中安装了Quartz插件。每5分钟触发一个作业,该作业将计算一些数字。数字显示在每页的侧栏上。计算结果会经常更改,我的目标是当用户刷新屏幕时,他们可以在侧边栏上看到新结果。 现在,我的方法是向控制器发送ajax调用,从数据库中获取结果并在屏幕上呈现

是否有任何方法将作业的计算结果存储(缓存)到数据库以外的其他位置,以便我的视图可以使用它们,而无需在用户每次单击链接或刷新屏幕时执行查询

我考虑过会话,但不确定它是否可能超出正常的web请求,或者它是否是一个好的解决方案。是否有任何解决方案或替代方法? 谢谢


您可以使用
grailsApplication
。只需将
grailsApplication
注入作业,然后使用赋值
grailsApplication.config.calcResults=calculatorService.runCalculators


您可能还需要初始化
Bootstrap.groovy
中的
grailsApplication.config.calcResults
值,以便在作业第一次运行之前它可用。

您可以使用
grailsApplication
。只需将
grailsApplication
注入作业,然后使用赋值
grailsApplication.config.calcResults=calculatorService.runCalculators


您可能还需要初始化
Bootstrap.groovy
中的
grailsApplication.config.calcResults
值,以便在作业第一次运行之前它可用。

Grails中的服务默认为单例,因此,在Quartz作业中访问的
calculatorService
将与在其连接的其他类(例如控制器)中访问的
calculatorService
相同

只需将值存储在类级别的
calculatorService
中,并为控制器添加一个访问器方法来检索数据

class CalculatorService {

    ConcurrentHashMap cache = [:]

    def runCalculators() {
        // Do calculations
        cache.result1 = calculatedResult1
        // etc...
    }

    def retrieveCalculation(String key) {
        cache[(key)]
    }
}

Grails中的服务默认为单例服务,因此Quartz作业中访问的
calculatorService
将与连接它的其他类(例如控制器)中访问的
calculatorService
相同

只需将值存储在类级别的
calculatorService
中,并为控制器添加一个访问器方法来检索数据

class CalculatorService {

    ConcurrentHashMap cache = [:]

    def runCalculators() {
        // Do calculations
        cache.result1 = calculatedResult1
        // etc...
    }

    def retrieveCalculation(String key) {
        cache[(key)]
    }
}

否决这个答案的人是否愿意解释他们的反对意见?否决这个答案的人是否愿意解释他们的反对意见?