我正在部署一个应用程序,该应用程序需要在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运行一个节点。然后也得到错误。 如果我错了,请纠正我。
这里的任何帮助将不胜感激。
答案 0 :(得分:0)
很可能您的配置文件中有多个class A:
def __init__(self, name, color=None):
self.name = name
self._color = color
@property
def color(self):
return self._color
@color.setter
def color(self, value):
# some logic you may need before setting color to value
self._color = value
object1 = A('car')
if not object1.color: # or if object1.color is None:
object1.color = 'blue'
bean。如果一个配置bean扩展了另一个配置bean,那么请确保其父对象是抽象的。
答案 1 :(得分:0)
我已经解决了问题。似乎问题不是Ignite配置,而是Spring Framework配置。
我正在使用lazy-init = true为Ignite类创建bean。我将其切换为eager-init并解决了我的问题。 不确定如何解决这个问题,但至少在我看来有效。