springboot聚合项目整合redis时候,项目出现class找不到的问题
微服务之前也一直听说过,但是一直没有机会用。刚好,想把公司最近基于ssm的分布式项目,重构成微服务的。网上看了一些教程。话不多说就准备弄了。
整合后,发现项目一直报找不到redis对应的class文件的问题。
解决过程:
1.1试过在manage的后台,检查了common的jar是否存在对应的class文件,有,解决未果
1.2 将common里面的redis配置类,复制到对应的manage的包下,然后去执行缓存是否正常,解决未果,反而还引发了多余重复类的bug
参考:https://blog.****.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());
}
}
}
参考资料:https://blog.****.net/b1250372262/article/details/78930760