Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在两个war文件之间访问相同的缓存?_Java_Spring_Redis - Fatal编程技术网

Java 如何在两个war文件之间访问相同的缓存?

Java 如何在两个war文件之间访问相同的缓存?,java,spring,redis,Java,Spring,Redis,我使用Springannotation的@Cacheable来缓存数据,Redis作为缓存管理器 我在一场战争中创建了名为xyx的缓存,现在我想在另一场战争中访问/更新/删除相同的缓存 下面是我用来创建缓存管理器的代码 @Bean public JedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory redisConnectionFactory = new JedisConnectionFact

我使用
Spring
annotation的
@Cacheable
来缓存数据,
Redis
作为缓存管理器

我在一场战争中创建了名为xyx的缓存,现在我想在另一场战争中访问/更新/删除相同的缓存

下面是我用来创建缓存管理器的代码

@Bean
  public JedisConnectionFactory redisConnectionFactory() {
    JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();

    // Defaults
    redisConnectionFactory.setHostName("127.0.0.1");
    redisConnectionFactory.setPort(6379);
    return redisConnectionFactory;
  }

Bean
  public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory cf) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(cf);
    return redisTemplate;
  }

@Primary
  @Bean(name = "cManager")
  public CacheManager cacheManager(RedisTemplate redisTemplate) {
    RedisCacheManager cm= new RedisCacheManager(redisTemplate);
    return cm;
  }
@Bean
public JedisConnectionFactory redisConnectionFactory(){
JedisConnectionFactory redisConnectionFactory=新的JedisConnectionFactory();
//默认值
setHostName(“127.0.0.1”);
设置端口(6379);
返回连接工厂;
}
豆子
公共RedisTemplate RedisTemplate(RedisConnectionFactory cf){
RedisTemplate RedisTemplate=新RedisTemplate();
redisTemplate.setConnectionFactory(cf);
返回模板;
}
@初级的
@Bean(name=“cManager”)
公共缓存管理器缓存管理器(RedisTemplate RedisTemplate){
RedisCacheManager cm=新的RedisCacheManager(redisTemplate);
返回cm;
}
下面是war 1中缓存数据的方法

@Cacheable(value = "xyz"  , cacheManager = "cManager")
public Map<String, Map<String, List<DTO>>> cachingData()
        throws CustomException {
    //logic
    }
@Cacheable(value=“xyz”,cacheManager=“cManager”)
公共地图cachingData()
抛出自定义异常{
//逻辑
}

只要两个web应用程序都连接到同一个Redis实例,并且使用相同的cacheName和cache密钥,就应该透明地工作,就像在同一场战争中一样

示例注释

@Cacheable(cacheNames = "myCache", key = "'myKey'")
public String myCacheableMethod(){
    return "some value";
}

在这里,我们创建了名为“myCache”和键为“myKey”的缓存。我的问题是我们如何在另一场战争中访问同一个缓存?我不确定我是否理解你的问题。在另一场战争中,同样的代码也可以访问同样的缓存。无需更改代码。我已添加有问题的代码。在war2中,我使用相同的代码创建cachemanager。现在,当我尝试从war2的cachemanager获取CacheNames()时,我得到了空响应