我已经在 Grails 2.1 应用程序中安装了 Quartz 插件。每 5 分钟就会触发一个作业来计算一些数字。这些数字显示在每个页面的侧栏上。计算结果会经常变化,我的目标是当用户刷新屏幕时,他们可以在侧边栏上看到新结果。
现在我的方法是将 ajax 调用发送到控制器并从数据库中获取结果并将其呈现在屏幕上。
有没有什么方法可以将作业的计算结果存储(缓存)到数据库以外的其他位置,以便我的视图可以使用它们,而无需在每次用户单击链接或刷新屏幕时执行查询?
我考虑过会话,但不确定它是否可能超出正常的网络请求或其根本是一个好的解决方案。有什么解决方案或替代方法吗?
谢谢
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 中的服务默认是单例的,因此calculatorService
在 Quartz 作业中访问将是相同的calculatorService
在连接它的其他类(例如控制器)中访问。
只需将值存储在您的类级别calculatorService
并添加控制器的访问器方法来检索数据。
class CalculatorService {
ConcurrentHashMap cache = [:]
def runCalculators() {
// Do calculations
cache.result1 = calculatedResult1
// etc...
}
def retrieveCalculation(String key) {
cache[(key)]
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)