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

我在问这是否正确和最佳,是否有人对使用lazy-init选项或s​​ynced()的正面或负面影响有所投入。我想以最佳方式以这种方式使用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;

    }



}


春豆:

 <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>

最佳答案

此解决方案可以使用,但存在问题:


您应该清楚地了解这不是一个完整的单例,因为每个实例都将拥有自己的工厂实例。
它将影响动态实例的启动时间。有一个已知的问题,每个spring bean将为实例启动时间增加一些时间。因此,如果您的HTTP请求将导致实例启动,则请求启动与实际响应过程之间会存在延迟。在最近的几次会议中,很多人都遇到了这个问题。个月。实例启动时间甚至可能超过60秒,并且您将获得艰难的截止日期Exception。因此建议不要完全使用Spring来加快启动时间。检查http://code.google.com/p/googleappengine/issues/detail?id=7706以获得详细信息。

09-25 20:40