ddth-cache-adapter-core/src/main/java/com/github/ddth/cacheadapter/cacheimpl/guava/GuavaCache.java
@Override
    public GuavaCache init() {
        super.init();

        /*
         * Parse custom property: clone-cache-entries
         */
        boolean oldCloneCacheEntries = this.cloneCacheEntries;
        try {
            this.cloneCacheEntries = Boolean
                    .parseBoolean(getCacheProperty(CACHE_PROP_CLONE_CACHE_ENTRIES));
        } catch (Exception e) {
            this.cloneCacheEntries = oldCloneCacheEntries;
            if (getCacheProperty(CACHE_PROP_CLONE_CACHE_ENTRIES) != null) {
                LOGGER.warn(e.getMessage(), e);
            }
        }

        int numProcessores = Runtime.getRuntime().availableProcessors();
        CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder()
                .concurrencyLevel(numProcessores * 2);
        if (getCapacity() > 0) {
            cacheBuilder.maximumSize(getCapacity());
        }

        long expireAfterAccess = getExpireAfterAccess();
        long expireAfterWrite = getExpireAfterWrite();
        if (expireAfterAccess > 0) {
            cacheBuilder.expireAfterAccess(expireAfterAccess, TimeUnit.SECONDS);
        } else if (expireAfterWrite > 0) {
            cacheBuilder.expireAfterWrite(expireAfterWrite, TimeUnit.SECONDS);
        }

        CacheLoader<String, Object> guavaCacheLoader = new CacheLoader<String, Object>() {
            @Override
            public Object load(String key) throws Exception {
                ICacheLoader cacheLoader = getCacheLoader();
                Object result = cacheLoader != null ? cacheLoader.load(key) : null;
                if (result != null) {
                    return result;
                } else {
                    throw new CacheException.CacheEntryNotFoundException();
                }
            }
        };
        cache = cacheBuilder.build(guavaCacheLoader);

        return this;
    }
@Override
    public GuavaCache init() {
        super.init();

        /*
         * Parse custom property: clone-cache-entries
         */
        boolean oldCloneCacheEntries = this.cloneCacheEntries;
        try {
            this.cloneCacheEntries = Boolean
                    .parseBoolean(getCacheProperty(CACHE_PROP_CLONE_CACHE_ENTRIES));
        } catch (Exception e) {
            this.cloneCacheEntries = oldCloneCacheEntries;
            if (getCacheProperty(CACHE_PROP_CLONE_CACHE_ENTRIES) != null) {
                LOGGER.warn(e.getMessage(), e);
            }
        }

        int numProcessores = Runtime.getRuntime().availableProcessors();
        CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder()
                .concurrencyLevel(numProcessores * 2);
        if (getCapacity() > 0) {
            cacheBuilder.maximumSize(getCapacity());
        }

        long expireAfterAccess = getExpireAfterAccess();
        long expireAfterWrite = getExpireAfterWrite();
        if (expireAfterAccess > 0) {
            cacheBuilder.expireAfterAccess(expireAfterAccess, TimeUnit.SECONDS);
        } else if (expireAfterWrite > 0) {
            cacheBuilder.expireAfterWrite(expireAfterWrite, TimeUnit.SECONDS);
        }

        CacheLoader<String, Object> guavaCacheLoader = new CacheLoader<String, Object>() {
            @Override
            public Object load(String key) throws Exception {
                ICacheLoader cacheLoader = getCacheLoader();
                Object result = cacheLoader != null ? cacheLoader.load(key) : null;
                if (result != null) {
                    return result;
                } else {
                    throw new CacheException.CacheEntryNotFoundException();
                }
            }
        };
        cache = cacheBuilder.build(guavaCacheLoader);

        return this;
    }
{@inheritDoc}