java - 获取 IgniteCheckedException : Default Ignite instance has already been started exception when enabling Persistence on single Node

标签 java spring ignite high-availability

我正在部署一个应用程序,需要在 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/

相关文章:

java - 在图像中查找图像

java - 仅查询 Apache Ignite 的缓存以获取本地备份条目

java - 如何在 Eclipse 中使用交叉引用包编译项目

java - 处理 Android 应用后台线程异常的最佳实践

java - 重置jmappane的光标

java - 如何使用Spring框架将同一个类的2个实例注入(inject)另外2个不同的类?

java - 无法让spring boot在gradle项目中自动创建数据库模式

java - 同一事务中的出站 channel 适配器

transactions - 何时使用 Ignite.Net 事务?

java - Ignite 线程池使用 - 如何正确地将数据并行放入缓存中?