绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
hazelcast mysql,Mapstore无法从数据库Hazelcast加载数据
2022-05-23 11:03:48

I am using Hazelcast and mysql.

I created a mapstore for my table in mysql. What i am trying to do is to populate data using map.loadAll from data base. My Map store implementation is this

public class CityMapStore

implements MapStore

{

private final Connection con;

public CityMapStore() {

try {

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hazel", "root", "root123");

con.createStatement().executeUpdate(

"create table if not exists City (id bigint, name varchar(45), primary key (id))");

} catch (SQLExpublic synchronized void delete(Long key) {

System.out.println("Delete:" + key);

try {

con.createStatement().executeUpdate(

String.format("delete from City where id = %s", key));

} catch (SQLException e) {

throw new RuntimeException(e);

}

}ception e) {

throw new RuntimeException(e);

}

}

public synchronized void delete( Long key )

{

System.out.println( "Delete:" + key );

try

{

con.createStatement().executeUpdate( String.format( "delete from City where id = %s", key ) );

}

catch ( SQLException e )

{

throw new RuntimeException( e );

}

}

public synchronized void deleteAll( Collection keys )

{

for ( Long key : keys )

delete( key );

}

public synchronized void storeAll( Map map )

{

for ( Map.Entry entry : map.entrySet() )

store( entry.getKey(), entry.getValue() );

}

public synchronized Map loadAll( Collection keys )

{

Map result = new HashMap();

for ( Long key : keys )

result.put( key, load( key ) );

return result;

}

public Set loadAllKeys()

{

return null;

}

}

My Load Class is this

public class LoadAllCity

{

public static void main( String[] args )

{

final Long numberOfEntriesToAdd = 1000l;

final String mapName = LoadAllCity.class.getCanonicalName();

final Config config = createNewConfig( mapName );

final HazelcastInstance node = Hazelcast.newHazelcastInstance( config );

final IMap map = node.getMap( mapName );

populateMap( map, numberOfEntriesToAdd );

System.out.printf( "# After populating map size\t: %d\n", map.size() );

System.out.printf( "# Map store has %d elements\n", numberOfEntriesToAdd );

map.evictAll();

System.out.printf( "# After evictAll map size\t: %d\n", map.size() );

map.loadAll( true );

System.out.printf( "# After loadAll map size\t: %d\n", map.size() );

}

private static void populateMap( IMap map, Long itemCount )

{

for ( long i = 0; i < itemCount; i++ )

{

City city = new City( "Viren" + i );

// map.put(i, city);

}

}

private static Config createNewConfig( String mapName )

{

final CityMapStore cityStore = new CityMapStore();

XmlConfigBuilder configBuilder = new XmlConfigBuilder();

Config config = configBuilder.build();

MapConfig mapConfig = config.getMapConfig( mapName );

MapStoreConfig mapStoreConfig = new MapStoreConfig();

mapStoreConfig.setClassName( CityMapStore.class.getCanonicalName() );

mapStoreConfig.setImplementation( cityStore );

mapStoreConfig.setWriteDelaySeconds( 0 );

mapConfig.setMapStoreConfig( mapStoreConfig );

return config;

}

}

解决方案

To load data at start up override loadAllKeys method first or if you do not want it than use selected keys to load with oveloaded loadAll method

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Hazelcast
创建时间:2022-04-18 14:01:59
Hazelcast
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~