Java 忽略Hazelcast MapStoreConfig

Java 忽略Hazelcast MapStoreConfig,java,hazelcast,Java,Hazelcast,我正在使用地图存储将我的hazelcast分布式地图持久保存在数据库中 在我的测试用例中,我启动了三个hazelcast实例,每个实例的配置方式相同: Config cfg = new Config(); cfg.setInstanceName("name"); hazelcast = Hazelcast.newHazelcastInstance(cfg); MapConfig mapConfig = new MapConfig("myMapName"); MapStoreConfig

我正在使用地图存储将我的hazelcast分布式地图持久保存在数据库中

在我的测试用例中,我启动了三个hazelcast实例,每个实例的配置方式相同:

Config cfg = new Config();
cfg.setInstanceName("name");
hazelcast = Hazelcast.newHazelcastInstance(cfg);    
MapConfig mapConfig = new MapConfig("myMapName");
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setClassName(MyMapStore.class.getName());
mapStoreConfig.setWriteDelaySeconds(0);
mapStoreConfig.setEnabled(true);
mapConfig.setMapStoreConfig(mapStoreConfig);
mapConfig.setBackupCount(2);
hazelcast.getConfig().addMapConfig(mapConfig);
IMap myMap = hazelcast.getMap("myMapName");
但是,当我向映射中添加值时,只有第一个集群成员写入数据库,MapStoreConfig只是在每个其他节点上设置为默认值。 但是,如果我将代码更改为以下内容,它将起作用:

Config cfg = new Config();
cfg.setInstanceName("name");
MapConfig mapConfig = new MapConfig("myMapName");
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setClassName(MyMapStore.class.getName());
mapStoreConfig.setWriteDelaySeconds(0);
mapStoreConfig.setEnabled(true);
mapConfig.setMapStoreConfig(mapStoreConfig);
mapConfig.setBackupCount(2);
cfg.addMapConfig(mapConfig);
hazelcast = Hazelcast.newHazelcastInstance(cfg);
IMap myMap = hazelcast.getMap("myMapName");
似乎是行
hazelcast.getConfig().addMapConfig(mapConfig)被忽略。

使用hazelcast v3.1.5进行测试。

据我所知,配置实例应仅被视为一种“模板”,用于创建一个实例,但不可用于以后修改此实例。虽然,根据快速网络搜索和查看文档,这并没有明确说明,但

  • 到目前为止,我看到的所有示例都遵循以下模式:首先创建和完成配置,然后创建相应的实例和配置
  • addMapConfig
    方法(in)不涉及任何通知机制。因此,至少必须有某种机制来通知Hazelcast实例更改的配置,但我认为这种机制不存在
    根据我在源代码中所读到的内容(例如,在和中),配置仅在构建时读取,并且在创建Hazelcast实例后似乎不可能更改配置

    在运行时配置Hazelcast的功能很方便,但非常容易引起误解。我使用Spring,所以我对配置的概念一直非常清楚。在大多数系统中(Hazelcast也不例外),应在实例化“引擎”之前指定配置。

    Marco是正确的。模板的设计目的不是在创建后进行修改。我们将在将来添加动态配置,但没有计划使当前配置可更新。