问题描述
我正在使用Infinispan作为生产中的集群服务器的缓存解决方案来开发Spring Boot应用程序。
Gradle Dependencies:(springboot版本= 2.3.3.RELEASE)
implementation 'org.springframework.boot:spring-boot-starter-web'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation "org.infinispan:infinispan-spring-boot-starter-embedded:2.3.3.Final"
compileOnly "org.infinispan:infinispan-component-annotations:10.1.8.Final"
部分源代码:
GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder();
String cacheLocation = "/data";
global.globalState().enable().persistentLocation(cacheLocation);
DefaultCacheManager cacheManager = new DefaultCacheManager(global.build());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder
.clustering()
.cacheMode(CacheMode.REPL_SYNC)
.expiration()
.maxIdle(1800,TimeUnit.SECONDS)
.locking()
.isolationLevel(IsolationLevel.REPEATABLE_READ)
.persistence()
.passivation(false)
.addSingleFileStore()
.preload(true)
.shared(false)
.fetchPersistentState(true)
.ignoreModifications(false)
.purgeOnStartup(false)
.location("cache")
.async()
.enabled(true);
Cache<String,String> cache = cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE)
.getorCreateCache("myCache",infinispanConfig);
但是我每分钟都会收到以下警告:
23:15:10.291 [WARN ] org.infi.PERSISTENCE - ISPN000026: Caught exception purging data container!
java.lang.UnsupportedOperationException
at org.infinispan.persistence.spi.AdvancedCacheExpirationWriter.purge(AdvancedCacheExpirationWriter.java:59)
at org.infinispan.persistence.async.AdvancedAsyncCacheWriter.purge(AdvancedAsyncCacheWriter.java:20)
at org.infinispan.persistence.manager.PersistenceManagerImpl.lambda$purgeExpired$9(PersistenceManagerImpl.java:527)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at org.infinispan.persistence.manager.PersistenceManagerImpl.purgeExpired(PersistenceManagerImpl.java:530)
at org.infinispan.expiration.impl.ClusterExpirationManager.processExpiration(ClusterExpirationManager.java:111)
at org.infinispan.expiration.impl.ExpirationManagerImpl$ScheduledTask.run(ExpirationManagerImpl.java:314)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
如果我删除代码.async()enabled(true)
,它可以工作,但是所有内容都是同步的,不是我想要的。此外,当节点也离开或进入群集时,我也会收到错误消息。使用Infinispan + Spring + Cluster Mode时出现很多错误。
我想将 CacheMode.REPL_ASYNC 与 后写 (async()enabled(true))功能一起使用,但是我还会收到另一个错误,例如“ ISPN000299:0毫秒后无法获取锁定”
上面称为“ / data”的目录位于我的本地Windows上,位于我的HD上。它不是共享的samba或NFS目录。我可以看到缓存文件正在正确创建。
我不想抑制警告。我希望解决该问题。
请帮忙。 谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)