在Grails中设置全局地图

时间:2014-01-17 15:14:56

标签: caching grails web-applications map grails-plugin

我正在构建一个Grails Web应用程序,我在BootStrap中创建了一个映射并将其放在servletContext中,以便从任何地方将它提供给我的应用程序。平均而言,此映射应包含大约1000个带有字符串键和日期值的条目。

我想知道这是否会影响我的应用程序性能,还有更好的地方可以保留这张地图吗?我希望这个地图作为一种缓存机制。我想在其中放置一个唯一的密钥和日期,并且能够通过传递密钥从控制器或服务类中的任何位置检索该日期对象。我正在考虑使用缓存机制来做到这一点,但没有找到一个可以做这种形式。我很感激,如果有人能为Grails推荐任何可以实现此目的的插件。

P.S:是否可以使用缓存插件执行此操作:http://grails-plugins.github.io/grails-cache/docs/manual/guide/usage.html#annotations

2 个答案:

答案 0 :(得分:1)

您可以使用服务执行此任务。服务是一个单身人士,所以它一直都是活着的。而且从应用程序的其他部分访问起来要容易得多。要准备应用程序启动数据,您可以implements InitializingBean

敌人的例子:

class MyCacheService implements InitializingBean {

  Map cache

  void afterPropertiesSet() {
     cache = [
        a: 1,
        b: 2,
        // .....
     ]
  }
}

答案 1 :(得分:0)

关于使Map缓存线程安全,我们可以使用ConcurrentReaderHashMap缓存,这样做主要是并发读取,但是独占写入。这样每个人都可以从服务中读取它,但不是每个人都可以写信给它或同时修改它。

可以在addToCache等方法上使用Synchronized块,这样两个控制器就不能同时写入,但对于getFromCache,我们不需要这样。

Sample code for ConcurrentReaderHashMap