微服务之前也一直听说过,但是一直没有机会用。刚好,想把公司最近基于ssm的分布式项目,重构成微服务的。网上看了一些教程。话不多说就准备弄了。
整合后,发现项目一直报找不到redis对应的class文件的问题。
解决过程:
1.1试过在manage的后台,检查了common的jar是否存在对应的class文件,有,解决未果
1.2 将common里面的redis配置类,复制到对应的manage的包下,然后去执行缓存是否正常,解决未果,反而还引发了多余重复类的bug
参考:https://blog.csdn.net/expect521/article/details/77837681
1.3 将
@SpringBootApplication(exclude={ RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class })
里面增加基础包扫描
@SpringBootApplication(exclude={ RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class },scanBasePackages={“com.jt.common.redis”)
这时解决了redisService找不到的问题。却又引发了新的bug。所有页面解析失效,而项目不报错。
what tht F*** !!!
简直是解决了一个bug,引发了另一个bug。
后面我想,是不是我将redis的工具类,没有放在对应的项目里面,只是通过依赖传递过来。导致在执行的时候,当前项目无法把基于maven传递的jar包给到当前项目。
那就直接把redis的工具类放在manage里面吧。
这时,主main函数恢复成如下
@SpringBootApplication(exclude={ RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class })
Redis加入成功。
此解决方案:一旦多个项目引用redis的情况,那么会导致redis的工具类会比较累赘,目前我还没有找到更好的解决方案。以后解决。
另外,附上我测试redis是否正常工作的demo:
package com.jt.manage.controller.web; import com.fasterxml.jackson.databind.ObjectMapper; import com.jt.manage.pojo.ItemCat; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * laughing1997:调试redis的demo */ public class zzk { public static void main(String[] args) throws IOException { ObjectMapper objectMapper = new ObjectMapper(); String nodes ="192.168.227.200:6379"; Integer maxIdle=8; Integer minIdle=0; Integer maxTotal=8;//对应配置文件时max-active Integer maxWait=5000; Integer timeout=1000000; JedisPoolConfig config=new JedisPoolConfig(); //设定参数 config.setMaxIdle(maxIdle); config.setMinIdle(minIdle); config.setMaxTotal(maxTotal); config.setMaxWaitMillis(maxWait); //获取infoList List<JedisShardInfo> infoList= new ArrayList<>(); //处理字符串nodes if(!("null".equals(nodes))) { String[] hostAndPorts = nodes.split(","); for (String node : hostAndPorts) { //每个node格式192.168.198.40:6379 String[] hostAndPort = node.split(":"); //生成一个info对象,添加到list中 JedisShardInfo info = new JedisShardInfo(hostAndPort[0], Integer.parseInt(hostAndPort[1]), timeout); infoList.add(info); } //用config对象和list对象生产jedis分片连接池 ShardedJedisPool pool = new ShardedJedisPool(config, infoList); ShardedJedis jedis = pool.getResource(); System.out.println(jedis); String json = jedis.get("ITEM_CAT_LIST_0"); System.out.println(json ); List<ItemCat> itemCatList = new ArrayList<>(); ItemCat[] itemCats =objectMapper.readValue(json,ItemCat[].class); for(ItemCat itemCat:itemCats){ itemCatList.add(itemCat); } System.out.println(itemCatList.toArray()); } } }