java - 使用 Spring 的 Google App Engine GAE MemcacheService 单例注入(inject)

标签 java spring google-app-engine

使用 com.google.appengine.api.memcache.MemcacheService 在 App Engine 中进行缓存,我使用工厂创建 memcacheservice 实例,并将其作为单例注入(inject)到我的类中。

我想问的是这是否正确和最佳,是否有人对使用 lazy-init 选项或 synchronized() 的正面或负面影响提出意见。我希望得到这个问题的答案,从而以这种方式使用 memcacheservice 的最佳方式。

谢谢!

工厂:

public class CacheFactory {

    private static MemcacheService INSTANCE;

    private CacheFactory() {
    }

    public static MemcacheService getInstance() {
        if (INSTANCE == null) {
            synchronized(CacheFactory.class){
            INSTANCE =  MemcacheServiceFactory.getMemcacheService();
            }
        }
        return INSTANCE;

    }



}

Spring Bean :

 <bean id="cacheFactory" class="com.nimbits.server.transactions.memcache.CacheFactory"
          factory-method="getInstance" lazy-init="false" scope="singleton" >
    </bean>

示例用法:

   <bean id="someService" class="SomeServiceImpl">
        <property name="cacheFactory" ref="cacheFactory" />
   </bean>

最佳答案

此解决方案可行但存在问题:

  1. 你应该清楚地明白它不是一个完整的单例,因为每个实例都会有它自己的工厂实例。

  2. 它会影响动态实例的启动时间。有一个已知问题,每个 spring bean 都会增加一些时间到实例启动时间。因此,如果您的 HTTP 请求将导致实例启动,则请求启动和实际响应过程之间会有延迟。在过去的几年里,很多人都遇到过这个问题;个月。实例启动时间甚至可能超过 60 秒,您将遇到硬期限异常。所以建议完全不要使用 Spring 来加快启动时间。检查http://code.google.com/p/googleappengine/issues/detail?id=7706了解详情。

关于java - 使用 Spring 的 Google App Engine GAE MemcacheService 单例注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12938008/

相关文章:

java - Spring + Struts + Spring Security 出现 NoSuchBeanDefinitionException

JAVA:java中访问列表的并发控制

java - Flyway——不复制sql资源

java - 提供静态内容的 Tomcat

java - 来自 Java 的 Google Cloud Storage 中的版本控制支持?

python - Google AppEngine 应用程序版本

android - 我应该使用哪个 : GAE or AWS?

java - 点击时 ListView 项目的渐变不会改变

java - 接受 0.5 和整数的正则表达式

java - 在没有 XML 的 Spring 4 中使用 EhCache