1. 程式人生 > >springboot聚合專案整合redis時候,專案出現class找不到的問題

springboot聚合專案整合redis時候,專案出現class找不到的問題

微服務之前也一直聽說過,但是一直沒有機會用。剛好,想把公司最近基於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