springboot聚合项目整合redis时候,项目出现class找不到的问题

2022-06-18 13:58:26

微服务之前也一直听说过,但是一直没有机会用。刚好,想把公司最近基于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());

        }
    }
}

参考资料:https://blog.csdn.net/b1250372262/article/details/78930760

  • 作者:laughing1997
  • 原文链接:https://blog.csdn.net/laughing1997/article/details/83113556
    更新时间:2022-06-18 13:58:26