Java 如何使用spring Cachable在Hazelcast缓存映射上设置TTL

Java 如何使用spring Cachable在Hazelcast缓存映射上设置TTL,java,spring-boot,hazelcast,spring-cache,Java,Spring Boot,Hazelcast,Spring Cache,我正在使用带有spring boot的Hazelcast群集缓存。我使用的是hazelcast的4.2版本 缓存工作正常,但在TTL之后不会从缓存映射中逐出数据。始终保持相同的数据。我尝试了很多设置ttl的方法,但都没有成功 这是我的机会配置类 import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.core.Hazelca

我正在使用带有spring boot的Hazelcast群集缓存。我使用的是hazelcast的4.2版本

缓存工作正常,但在TTL之后不会从缓存映射中逐出数据。始终保持相同的数据。我尝试了很多设置ttl的方法,但都没有成功

这是我的机会配置类

import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.spring.cache.HazelcastCacheManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CacheConfig {

  @Value("${hazelcast.cluster-name}")
  private String hzClusterName;

  @Value("${hazelcast.address}")
  private String hzAddress;

  @Bean
  HazelcastInstance hazelcastInstance() {
    return HazelcastClient.newHazelcastClient(clientConfig());
  }

  @Bean
  public ClientConfig clientConfig() {
    ClientConfig cfg = ClientConfig.load();
    cfg.setClusterName(hzClusterName);
    cfg.getNetworkConfig().addAddress(hzAddress);
    return cfg;
  }

  @Bean
  public CacheManager cacheManager() {
    return new HazelcastCacheManager(hazelcastInstance());
  }
}
我正在使用cacheable的cache类

@Cacheable("items")
public String getInfo(String systemSkuRef) {
  logger.debug("Not using cache, fetch and put in cache");
  return "Item Info";
}
我尝试通过设置在src/main/resources中使用hazelcast.yaml文件

hazelcast:
  network:
      public-address: 
  cluster-name: dev
  map:
    items:
      time-to-live-seconds: 120
      max-idle-seconds: 60
      eviction:
        eviction-policy: LRU
        max-size-policy: PER_NODE
        size: 1000


是否有其他方法或如何实现此目标,感谢您的帮助

您可以使用Hazelcast的两种拓扑:嵌入式和客户端服务器。JavaSpring配置配置Hazelcast客户端,但是您的
Hazelcast.yaml
专用于嵌入式模式

尝试在hazelcast服务器中使用
hazelcast.yaml
配置。或者在Hazelcast客户端中配置缓存,例如:

@Bean
HazelcastInstance hazelcastInstance() {
    HazelcastInstance instance = HazelcastClient.newHazelcastClient(clientConfig());
    instance.getConfig().addMapConfig(new MapConfig("items").setTimeToLiveSeconds(120));
    return instance;
}

谢谢@Rafal,它工作起来很有魅力。非常感谢你的帮助