我想用Apache Ignite使用JCache API(JSR107,javax.cache)配置分佈式緩存。這可能嗎?我可以在Apache Ignite中爲分佈式緩存使用JCache API嗎?
我發現的例子或者使用JCache API創建本地緩存,或者使用Apache Ignite API創建分佈式緩存(或數據網格)。
我想用Apache Ignite使用JCache API(JSR107,javax.cache)配置分佈式緩存。這可能嗎?我可以在Apache Ignite中爲分佈式緩存使用JCache API嗎?
我發現的例子或者使用JCache API創建本地緩存,或者使用Apache Ignite API創建分佈式緩存(或數據網格)。
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配置文件。發現,交流和其他參數可以在那裏提供。
請注意,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。
希望這會有所幫助。
我知道您可以在通過JCache創建緩存時使用特定於Ignite的配置,但我無法看到如何配置網格和發現SPI等相關內容。總之,我沒有設法創建存在於多個節點中的JCache緩存。 – PeakCode
@PeakCode明白了。我更新了我的回覆。 –