我正在部署一个应用程序,需要在 Ignite 缓存中维护一些数据。我在内存中使用了Ignite缓存。这是我使用的 Ignite 配置:
<property name="cacheConfiguration">
<list>
<bean
class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="IGNITE_DATA" />
<property name="cacheMode" value="PARTITIONED" />
<property name="atomicityMode" value="ATOMIC" />
<property name="writeSync"
value="PRIMARY_SYNC" />
<property name="backups"
value="${IGNITE_CACHE_BACKUPS}" />
</bean>
</list>
</property>
现在,当我部署应用程序的多个实例并将数据存储在 Ignite 缓存中时。它在所有应用程序实例之间共享。 即使任何实例出现故障并在一段时间后恢复,它也会通过 Ignite 缓存同步获得最新数据。
但是当所有应用程序实例都关闭时就会出现问题。当它们出现时,数据就消失了,因为它没有被持久化。对于持久性,我使用了 dataStorageConfiguration 属性并启用了持久性。以下是我添加到 Ignite 配置中的更改:
<property name="dataStorageConfiguration">
<bean
class="org.apache.ignite.configuration.DataStorageConfiguration">
<!-- Enabling Apache Ignite Persistent Store. -->
<property name="defaultDataRegionConfiguration">
<bean
class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true" />
</bean>
</property>
<!-- Changing Write Ahead Log Mode. -->
<property name="storagePath" value="${IGNITE_BC_STORE_PATH}"/>
<property name="walMode" value="LOG_ONLY" />
</bean>
</property>
现在,当我部署应用程序时,我尝试从 Java 代码启动 Ignite,如下所述:
log.info("Initializing IGNITE...");
ignite = Ignition.start(getClass().getResource(CONF_FILE));
每次我都会遇到异常,说明默认实例已经启动。尝试了几件事但没有成功。即使我从 Ignite Configuration 中删除 CacheConfiguration 并只保留 dataStorageConfiguration 我仍然遇到相同的错误。错误是:
Caused by: class org.apache.ignite.IgniteCheckedException: Default Ignite instance has already been started.
at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1141)
at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:1076)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:962)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:881)
at org.apache.ignite.Ignition.start(Ignition.java:373)
通常,当我们尝试在同一 JVM 下运行多个 Ignite 节点时,会出现此错误,但这里我为每个 JVM 运行单个节点。然后也收到错误。 如果我错了,请纠正我。
如有任何帮助,我们将不胜感激。
最佳答案
很可能,您的配置文件中有多个 IgniteConfiguration
bean。如果一个配置 bean 扩展了另一个配置 bean,请确保父级是抽象的。
关于java - 获取 IgniteCheckedException : Default Ignite instance has already been started exception when enabling Persistence on single Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222651/