grails - 如何在 session 中存储 quartz 作业的结果?

标签 grails quartz-scheduler grails-2.0

我已经在 Grails 2.1 应用程序中安装了 Quartz 插件。每 5 分钟就会触发一个作业来计算一些数字。这些数字显示在每个页面的侧栏上。计算结果会经常变化,我的目标是当用户刷新屏幕时,他们可以在侧边栏上看到新结果。 现在我的方法是将 ajax 调用发送到 Controller 并从数据库中获取结果并将其呈现在屏幕上。

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

我考虑过 session ,但不确定它是否可能超出正常的网络请求或其根本是一个好的解决方案。有什么解决方案或替代方法吗? 谢谢

class MonitoringJob {
    def calculatorService
    def name  = 'Monitoring'
    def group = 'ApplicationGroup'
    static triggers = {
        simple name: 'mySimpleTrigger', startDelay: 60000, repeatInterval: 30000
    }

    def execute() {
        def results = calculatorService.runCalculators()
            //something like this:   session.results  =result
    }
}

最佳答案

Grails 中的服务默认是单例的,因此 Quartz 作业中访问的 calculatorService 与它所连接的其他类中访问的 calculatorService 相同(例如, Controller )。

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

class CalculatorService {

    ConcurrentHashMap cache = [:]

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

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

关于grails - 如何在 session 中存储 quartz 作业的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12319037/

相关文章:

Grails:将堆栈跟踪记录到标准输出

java - 数据库表中的 Quartz 作业

hibernate - withTransaction 和 withNewTransaction 有什么区别?

Grails grails-oauth-scribe linkedin 重定向

grails - 从Quartz作业持久化域类实例

c# - Quartz.NET - 使用/理解基于 cron 的触发器和时区/夏令时(夏令时)

grails - 使用 Quartz 调试 Groovy/Grails 应用程序中的堆空间问题

grails - 依赖注入(inject)在使用邮件插件的 grails 作业中不起作用

mysql - 如何使用mysql在g​​roovy中存储持续时间

html - Grails 从自定义 URL 加载 CSS