Created
July 27, 2018 07:56
-
-
Save amirmv2006/ac35a9b3b4dbd8af99b15233b58547e6 to your computer and use it in GitHub Desktop.
a way for parallel process data in a Map.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Copyright (c) Experian, 2018. All rights reserved. | |
*/ | |
package com.javadeveloperzone; | |
import com.hazelcast.core.HazelcastInstance; | |
import com.hazelcast.core.ILock; | |
import com.hazelcast.core.IMap; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Component; | |
import javax.annotation.PostConstruct; | |
import java.util.Calendar; | |
import java.util.Date; | |
import java.util.GregorianCalendar; | |
import java.util.Iterator; | |
import java.util.Map; | |
import java.util.Timer; | |
import java.util.TimerTask; | |
import java.util.UUID; | |
/** | |
* @author Amir | |
*/ | |
@Component | |
public class TestHazelcast { | |
public static final String KEY = "key"; | |
@Autowired | |
private HazelcastInstance instance; | |
Logger logger = LoggerFactory.getLogger("Test"); | |
@PostConstruct | |
public void init() { | |
IMap<Object, Object> amir = instance.getMap("amir"); | |
for (int i = 0; i < 500; i++) { | |
String mapKey = KEY + i; | |
if (!amir.containsKey(mapKey)) { | |
UUID val = UUID.randomUUID(); | |
amir.put(mapKey, val); | |
logger.info("put value in map " + mapKey + ":" + val); | |
} | |
} | |
// consumeCache(amir); | |
System.out.println("amir = " + amir); | |
Timer timer = new Timer(); | |
GregorianCalendar cal = new GregorianCalendar(); | |
cal.set(Calendar.MINUTE, Integer.parseInt(System.getProperty("fire.min", "48"))); | |
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR)); | |
cal.set(Calendar.SECOND, 0); | |
cal.set(Calendar.MILLISECOND, 0); | |
timer.schedule(new TimerTask() { | |
@Override | |
public void run() { | |
consumeCache(amir); | |
} | |
}, cal.getTime()); | |
logger.info("scheduled on " + cal.getTime()); | |
} | |
private void consumeCache(final IMap<Object, Object> amir) { | |
ILock lock = instance.getLock("lock"); | |
lock.lock(); | |
Iterator<Map.Entry<Object, Object>> iterator = amir.entrySet().iterator(); | |
while (iterator.hasNext()) { | |
Map.Entry<Object, Object> next = iterator.next(); | |
logger.info("consumed " + next.getKey() + ":" + next.getValue()); | |
amir.remove(next.getKey()); | |
lock.unlock(); | |
lock.lock(); | |
iterator = amir.entrySet().iterator(); | |
} | |
lock.unlock(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment