package am.ik.categolj2.config;
import com.hazelcast.config.*;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.spring.cache.HazelcastCacheManager;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.interceptor.SimpleKeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@Configuration
@EnableCaching
@Profile("cache.hazelcast")
public class HazelcastCacheConfiguration extends CachingConfigurerSupport {
@Inject
HazelcastProperties hazelcastProperties;
@Bean
HazelcastInstance hazelcastInstance() {
MulticastConfig multicastConfig = new MulticastConfig();
multicastConfig.setEnabled(hazelcastProperties.isMulticastEnabled());
multicastConfig.setMulticastGroup(hazelcastProperties.getMulticastGroup());
multicastConfig.setMulticastPort(hazelcastProperties.getMulticastPort());
JoinConfig joinConfig = new JoinConfig();
joinConfig.setMulticastConfig(multicastConfig);
NetworkConfig networkConfig = new NetworkConfig();
networkConfig.setPort(hazelcastProperties.getPort());
networkConfig.setPortAutoIncrement(true);
networkConfig.setJoin(joinConfig);
NearCacheConfig nearCacheConfig = new NearCacheConfig();
nearCacheConfig.setMaxSize(hazelcastProperties.getNearCacheMaxSize());
nearCacheConfig.setMaxIdleSeconds(hazelcastProperties.getNearCacheMaxIdleSeconds());
nearCacheConfig.setEvictionPolicy("LRU");
nearCacheConfig.setCacheLocalEntries(true);
MapConfig mapConfig = new MapConfig();
mapConfig.setName("categolj");
mapConfig.setBackupCount(hazelcastProperties.getBackupCount());
mapConfig.setNearCacheConfig(nearCacheConfig);
Map<String, MapConfig> mapConfigMap = new HashMap<>();
mapConfigMap.put(mapConfig.getName(), mapConfig);
Config config = new Config();
config.setGroupConfig(new GroupConfig(
hazelcastProperties.getGroupName(),
hazelcastProperties.getGroupPassword()));
config.setProperties(new Properties() {{
put("hazelcast.jmx", hazelcastProperties.isJmx());
put("hazelcast.logging.type", "slf4j");
}});
config.setNetworkConfig(networkConfig);
config.setMapConfigs(mapConfigMap);
return Hazelcast.newHazelcastInstance(config);
}
@Bean
@Override
public CacheManager cacheManager() {
HazelcastCacheManager cacheManager = new HazelcastCacheManager(hazelcastInstance());
return cacheManager;
}
@Bean
@Override
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
}