springboot聚合專案整合redis時候,專案出現class找不到的問題
阿新 • • 發佈:2018-11-11
微服務之前也一直聽說過,但是一直沒有機會用。剛好,想把公司最近基於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