2016-01-26 40 views

回答

2

JCache允許在創建緩存時提供特定於提供程序的配置。即,你可以這樣做:

// Get or create a cache manager. 
CacheManager cacheMgr = Caching.getCachingProvider().getCacheManager(); 

// This is an Ignite configuration object (org.apache.ignite.configuration.CacheConfiguration). 
CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>(); 

// Specify cache mode and/or any other Ignite-specific configuration properties. 
cfg.setCacheMode(CacheMode.PARTITIONED); 

// Create a cache based on configuration create above. 
Cache<Integer, String> cache = cacheMgr.createCache("a", cfg); 

還要注意的是分區模式實際上是默認之一點燃,所以你並不需要顯式指定它。

UPD。此外,CachingProvider.getCacheManager(..)方法接受提供程序特定的URI,以便Ignite應指向XML配置文件。發現,交流和其他參數可以在那裏提供。

+0

我知道您可以在通過JCache創建緩存時使用特定於Ignite的配置,但我無法看到如何配置網格和發現SPI等相關內容。總之,我沒有設法創建存在於多個節點中的JCache緩存。 – PeakCode

+0

@PeakCode明白了。我更新了我的回覆。 –

0

請注意,JCache規範並未指定適用於各個緩存提供者的所有配置,這些配置均通過CacheManager進行配置以創建網格。創建CacheManager的要求是標準的,但不是與經理本身配置相關的所有內容。

下面的代碼將演示如何在SpringBoot

@Bean 
@SuppressWarnings("unchecked") 
public org.apache.ignite.cache.spring.SpringCacheManager cacheManager() { 
    IgniteConfiguration igniteConfiguration = new IgniteConfiguration(); 
    igniteConfiguration.setGridName("petclinic-ignite-grid"); 
    //igniteConfiguration.setClassLoader(dynamicClassLoaderWrapper()); 

    igniteConfiguration.setCacheConfiguration(this.createDefaultCache("petclinic"), 
      this.createDefaultCache("org.hibernate.cache.spi.UpdateTimestampsCache"), 
      this.createDefaultCache("org.hibernate.cache.internal.StandardQueryCache")); 

    SpringCacheManager springCacheManager = new SpringCacheManager(); 
    springCacheManager.setConfiguration(igniteConfiguration); 
    springCacheManager.setDynamicCacheConfiguration(this.createDefaultCache(null)); 
    return springCacheManager; 
} 

private org.apache.ignite.configuration.CacheConfiguration createDefaultCache(String name) { 

    org.apache.ignite.configuration.CacheConfiguration cacheConfiguration = new org.apache.ignite.configuration.CacheConfiguration(); 
    cacheConfiguration.setName(name); 
    cacheConfiguration.setCacheMode(CacheMode.PARTITIONED); 
    cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); 
    cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); 
    cacheConfiguration.setStatisticsEnabled(true); 
    cacheConfiguration.setEvictSynchronized(true); 
    return cacheConfiguration; 
} 
} 

創建使用Apache點燃網格如果我們創建這個服務的另一個實例,並將它註冊到同一網格,igniteConfiguration.setGridName(「的PetClinic - - - - - - 網格「),IMDG將被創建。請注意,使用此版本的分區嵌入式分佈式緩存的2個服務實例應該能夠通過所需的端口相互通信。有關更多詳細信息,請參閱Apache Ignite - Data Grid

希望這會有所幫助。

相關問題