最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Guava自動(dòng)加載緩存LoadingCache使用實(shí)戰(zhàn)詳解

 更新時(shí)間:2023年12月22日 09:05:50   作者:S  
這篇文章主要為大家介紹了Guava自動(dòng)加載緩存LoadingCache使用實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

第1章:引言

今天我們來(lái)聊聊緩存。在Java世界里,高效的緩存機(jī)制對(duì)于提升應(yīng)用性能、降低數(shù)據(jù)庫(kù)負(fù)擔(dān)至關(guān)重要。想象一下,如果每次數(shù)據(jù)請(qǐng)求都要跑到數(shù)據(jù)庫(kù)里取,那服務(wù)器豈不是要累趴了?這時(shí)候,緩存就顯得尤為重要了。

那么,怎么實(shí)現(xiàn)一個(gè)既高效又好用的緩存呢?別急,咱們今天的主角——Guava的LoadingCache就是這樣一個(gè)神器。LoadingCache,顧名思義,就是能夠自動(dòng)加載緩存的工具。它不僅能自動(dòng)載入數(shù)據(jù),還能按需刷新,簡(jiǎn)直是懶人救星!接下來(lái),小黑就帶大家一起深入探究Guava的這個(gè)強(qiáng)大功能。

第2章:Guava簡(jiǎn)介

Guava是Google開(kāi)源的一款Java庫(kù),提供了一堆好用的工具類(lèi),從集合操作、緩存機(jī)制到函數(shù)式編程,應(yīng)有盡有。使用Guava,咱們可以寫(xiě)出更簡(jiǎn)潔、更高效、更優(yōu)雅的Java代碼。今天,小黑重點(diǎn)要聊的是Guava中的緩存部分。

首先,讓我們來(lái)看看Guava緩存的一個(gè)基本概念:LoadingCache。LoadingCache是Guava中一個(gè)提供自動(dòng)加載功能的緩存接口。它允許咱們通過(guò)一個(gè)CacheLoader來(lái)指定如何加載緩存。這就意味著,當(dāng)咱們嘗試從緩存中讀取一個(gè)值,如果這個(gè)值不存在,LoadingCache就會(huì)自動(dòng)調(diào)用預(yù)定義的加載機(jī)制去獲取數(shù)據(jù),然后將其加入到緩存中,非常智能。

來(lái),小黑先給大家展示一個(gè)簡(jiǎn)單的LoadingCache創(chuàng)建示例:

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class LoadingCacheExample {
    public static void main(String[] args) {
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
                .maximumSize(100) // 最大緩存項(xiàng)數(shù)
                .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) throws Exception {
                        return "Hello, " + key; // 定義緩存加載的方式
                    }
                });
        System.out.println(cache.getUnchecked("Guava")); // 輸出:Hello, Guava
    }
}

在這個(gè)例子里,小黑創(chuàng)建了一個(gè)簡(jiǎn)單的LoadingCache實(shí)例。當(dāng)咱們嘗試通過(guò)getUnchecked方法獲取一個(gè)緩存項(xiàng)時(shí),如果這個(gè)項(xiàng)不存在,CacheLoader會(huì)自動(dòng)加載一個(gè)新值。在這里,它就是簡(jiǎn)單地返回一個(gè)字符串。

第3章:LoadingCache基礎(chǔ)

什么是LoadingCache呢?簡(jiǎn)單來(lái)說(shuō),它是Guava提供的一個(gè)緩存接口,能夠自動(dòng)加載緩存。當(dāng)你嘗試從緩存中讀取一個(gè)值時(shí),如果這個(gè)值不存在,LoadingCache會(huì)自動(dòng)調(diào)用預(yù)定義的加載邏輯來(lái)獲取這個(gè)值,然后存儲(chǔ)到緩存中。這個(gè)過(guò)程完全自動(dòng)化,省去了很多手動(dòng)管理緩存的麻煩。

那么,LoadingCache的核心特性是什么呢?首先,它提供了自動(dòng)的緩存加載機(jī)制,這意味著咱們不需要自己去寫(xiě)代碼判斷緩存是否存在或者過(guò)期。其次,它支持多種緩存過(guò)期策略,比如基于時(shí)間的過(guò)期、大小限制等,確保緩存的有效性。再者,LoadingCache還提供了緩存統(tǒng)計(jì)和監(jiān)聽(tīng)的功能,方便咱們監(jiān)控和調(diào)優(yōu)緩存的使用。

來(lái),讓小黑用一個(gè)例子來(lái)展示一下LoadingCache的基本用法:

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.concurrent.ExecutionException;
public class LoadingCacheDemo {
    public static void main(String[] args) throws ExecutionException {
        // 創(chuàng)建一個(gè)CacheLoader
        CacheLoader<String, String> loader = new CacheLoader<String, String>() {
            @Override
            public String load(String key) {
                return key.toUpperCase(); // 模擬加載數(shù)據(jù)的過(guò)程
            }
        };
        // 使用CacheBuilder構(gòu)建一個(gè)LoadingCache
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
                .maximumSize(100) // 設(shè)置最大緩存數(shù)為100
                .build(loader);
        // 使用緩存
        System.out.println(cache.get("hello")); // 輸出: HELLO
        System.out.println(cache.get("guava")); // 輸出: GUAVA
    }
}

在這個(gè)例子中,小黑創(chuàng)建了一個(gè)CacheLoader來(lái)定義加載數(shù)據(jù)的邏輯,這里就是簡(jiǎn)單地將字符串轉(zhuǎn)換為大寫(xiě)。然后,使用CacheBuilder來(lái)構(gòu)建一個(gè)LoadingCache實(shí)例,設(shè)置了最大緩存數(shù)為100。當(dāng)調(diào)用get方法時(shí),如果緩存中不存在對(duì)應(yīng)的鍵值,LoadingCache會(huì)自動(dòng)調(diào)用CacheLoader來(lái)加載數(shù)據(jù),并將結(jié)果存入緩存。

第4章:創(chuàng)建LoadingCache

創(chuàng)建一個(gè)LoadingCache最關(guān)鍵的就是定義一個(gè)CacheLoader。這個(gè)CacheLoader指定了如何加載緩存。它就像是個(gè)工廠,當(dāng)咱們請(qǐng)求的數(shù)據(jù)在緩存中不存在時(shí),它就會(huì)生產(chǎn)出所需的數(shù)據(jù)。

那么,怎么定義這個(gè)CacheLoader呢?讓小黑給你看個(gè)例子:

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class UserCache {
    // 假設(shè)有一個(gè)用戶(hù)服務(wù),用于獲取用戶(hù)信息
    private static UserService userService = new UserService();
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建CacheLoader
        CacheLoader<String, User> loader = new CacheLoader<String, User>() {
            @Override
            public User load(String userId) {
                // 從用戶(hù)服務(wù)獲取用戶(hù)信息
                return userService.getUserById(userId);
            }
        };
        // 創(chuàng)建LoadingCache
        LoadingCache<String, User> cache = CacheBuilder.newBuilder()
                .maximumSize(100) // 設(shè)置最大緩存數(shù)
                .build(loader);
        // 使用緩存獲取用戶(hù)信息
        User user = cache.get("123"); // 如果緩存中沒(méi)有,會(huì)調(diào)用load方法加載數(shù)據(jù)
        System.out.println(user);
    }
}

在這個(gè)例子中,小黑創(chuàng)建了一個(gè)CacheLoader來(lái)從用戶(hù)服務(wù)中獲取用戶(hù)信息。然后,使用CacheBuilder來(lái)構(gòu)建一個(gè)LoadingCache,并設(shè)置了最大緩存數(shù)量為100。當(dāng)咱們通過(guò)get方法獲取用戶(hù)信息時(shí),如果緩存中沒(méi)有相應(yīng)的數(shù)據(jù),CacheLoader就會(huì)自動(dòng)加載數(shù)據(jù)。

這個(gè)過(guò)程聽(tīng)起來(lái)是不是很神奇?實(shí)際上,這背后是一種非常有效的數(shù)據(jù)管理策略。通過(guò)這種方式,咱們可以減少對(duì)數(shù)據(jù)庫(kù)或遠(yuǎn)程服務(wù)的直接訪問(wèn),提高了應(yīng)用的響應(yīng)速度和效率。

第5章:LoadingCache的高級(jí)特性

自動(dòng)加載和刷新機(jī)制

首先,LoadingCache的一個(gè)很棒的功能就是自動(dòng)加載和刷新。這意味著當(dāng)咱們請(qǐng)求某個(gè)鍵的值時(shí),如果這個(gè)值不存在或者需要刷新,LoadingCache會(huì)自動(dòng)調(diào)用CacheLoader去加載或刷新數(shù)據(jù)。

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.concurrent.TimeUnit;
public class AutoRefreshCache {
    public static void main(String[] args) throws Exception {
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
                .refreshAfterWrite(1, TimeUnit.MINUTES) // 設(shè)置1分鐘后刷新
                .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) {
                        return fetchDataFromDatabase(key); // 模擬從數(shù)據(jù)庫(kù)加載數(shù)據(jù)
                    }
                });
        // 使用緩存
        System.out.println(cache.get("key1")); // 第一次加載
        // 1分鐘后,嘗試再次獲取,將觸發(fā)刷新操作
    }
    private static String fetchDataFromDatabase(String key) {
        // 模擬數(shù)據(jù)庫(kù)操作
        return "Data for " + key;
    }
}

在這個(gè)例子中,咱們?cè)O(shè)置了refreshAfterWrite,這意味著每當(dāng)一個(gè)鍵值對(duì)寫(xiě)入一分鐘后,它就會(huì)被自動(dòng)刷新。

處理異常值

有時(shí)候,加載數(shù)據(jù)可能會(huì)出現(xiàn)異常。LoadingCache提供了優(yōu)雅的處理異常的機(jī)制。

public class ExceptionHandlingCache {
    public static void main(String[] args) throws Exception {
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
                .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) throws Exception {
                        if ("errorKey".equals(key)) {
                            throw new Exception("Loading error");
                        }
                        return "Data for " + key;
                    }
                });

        try {
            System.out.println(cache.get("errorKey"));
        } catch (Exception e) {
            System.out.println("Error during cache load: " + e.getMessage());
        }
    }
}

這里,如果加載過(guò)程中出現(xiàn)異常,咱們可以捕獲這個(gè)異常,并做適當(dāng)?shù)奶幚怼?/p>

統(tǒng)計(jì)和監(jiān)聽(tīng)功能

LoadingCache還提供了緩存統(tǒng)計(jì)和監(jiān)聽(tīng)功能,這對(duì)于監(jiān)控緩存性能和行為非常有用。

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
public class CacheMonitoring {
    public static void main(String[] args) throws Exception {
        RemovalListener<String, String> removalListener = new RemovalListener<String, String>() {
            @Override
            public void onRemoval(RemovalNotification<String, String> notification) {
                System.out.println("Removed: " + notification.getKey() + ", Cause: " + notification.getCause());
            }
        };
        LoadingCache<String, String> cache = CacheBuilder.newBuilder()
                .maximumSize(100)
                .removalListener(removalListener)
                .build(new CacheLoader<String, String>() {
                    // ...
                });
        // 使用緩存
        // ...
    }
}

在這個(gè)例子中,小黑設(shè)置了一個(gè)RemovalListener,用于監(jiān)聽(tīng)緩存項(xiàng)的移除事件。

第6章:LoadingCache的最佳實(shí)踐

配置緩存大小

合理配置緩存大小非常關(guān)鍵。如果緩存太小,就會(huì)頻繁地加載數(shù)據(jù),影響性能;如果太大,又可能消耗過(guò)多內(nèi)存。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .maximumSize(1000) // 設(shè)置最大緩存項(xiàng)為1000
        .build(new CacheLoader<String, String>() {
            // ...
        });

在這個(gè)例子中,小黑設(shè)置了最大緩存項(xiàng)為1000。這個(gè)值需要根據(jù)實(shí)際情況和資源限制來(lái)調(diào)整。

設(shè)置合適的過(guò)期策略

LoadingCache支持基于時(shí)間的過(guò)期策略,比如訪問(wèn)后過(guò)期和寫(xiě)入后過(guò)期。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .expireAfterWrite(10, TimeUnit.MINUTES) // 寫(xiě)入后10分鐘過(guò)期
        .expireAfterAccess(5, TimeUnit.MINUTES) // 訪問(wèn)后5分鐘過(guò)期
        .build(new CacheLoader<String, String>() {
            // ...
        });

選擇合適的過(guò)期策略可以確保緩存中的數(shù)據(jù)既不會(huì)過(guò)時(shí),又能有效利用內(nèi)存。

異常處理策略

在加載數(shù)據(jù)時(shí)可能會(huì)遇到各種異常。咱們可以設(shè)置一個(gè)合理的異常處理策略,比如記錄日志、返回默認(rèn)值或者重新拋出異常。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .build(new CacheLoader<String, String>() {
            @Override
            public String load(String key) throws Exception {
                try {
                    return fetchData(key);
                } catch (Exception e) {
                    // 處理異常
                }
            }
        });

使用軟引用或弱引用

為了防止緩存占用過(guò)多內(nèi)存,可以使用軟引用或弱引用。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .softValues() // 使用軟引用存儲(chǔ)值
        .weakKeys() // 使用弱引用存儲(chǔ)鍵
        .build(new CacheLoader<String, String>() {
            // ...
        });

使用軟引用和弱引用可以幫助Java垃圾收集器在需要時(shí)回收緩存項(xiàng),防止內(nèi)存泄露。

監(jiān)聽(tīng)移除通知

設(shè)置移除監(jiān)聽(tīng)器可以幫助咱們了解緩存的行為,比如為什么某個(gè)項(xiàng)被移除。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .removalListener(notification -> {
            // 處理移除通知
        })
        .build(new CacheLoader<String, String>() {
            // ...
        });

通過(guò)這些最佳實(shí)踐,咱們可以確保LoadingCache的高效運(yùn)行,同時(shí)避免一些常見(jiàn)的問(wèn)題。這樣,咱們的Java應(yīng)用就能更加穩(wěn)定和高效地運(yùn)行啦!

第7章:LoadingCache與Java 8的結(jié)合

好的,咱們接下來(lái)聊聊怎樣把LoadingCache和Java 8的特性結(jié)合起來(lái),用起來(lái)更順手。

Java 8引入了很多強(qiáng)大的新特性,像Lambda表達(dá)式、Stream API等,這些都可以和LoadingCache搭配使用,讓代碼更簡(jiǎn)潔、更易讀。

使用Lambda表達(dá)式簡(jiǎn)化CacheLoader

首先,咱們可以用Lambda表達(dá)式來(lái)簡(jiǎn)化CacheLoader的創(chuàng)建。這樣代碼看起來(lái)更干凈,更直觀。

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
        .build(key -> fetchDataFromDatabase(key)); // 使用Lambda表達(dá)式
private static String fetchDataFromDatabase(String key) {
    // 數(shù)據(jù)庫(kù)操作
    return "Data for " + key;
}

在這個(gè)例子里,小黑用Lambda表達(dá)式替代了傳統(tǒng)的匿名內(nèi)部類(lèi),使代碼更加簡(jiǎn)潔。

結(jié)合Stream API處理緩存數(shù)據(jù)

接下來(lái),咱們看看如何用Java 8的Stream API來(lái)處理LoadingCache中的數(shù)據(jù)。

LoadingCache<String, User> userCache = //... 緩存初始化
List<String> userIds = //... 用戶(hù)ID列表
// 使用Stream API獲取用戶(hù)信息列表
List<User> users = userIds.stream()
        .map(userId -> userCache.getUnchecked(userId))
        .collect(Collectors.toList());

在這個(gè)例子中,小黑用Stream API來(lái)處理一系列用戶(hù)ID,然后用map方法從緩存中獲取對(duì)應(yīng)的用戶(hù)信息。

利用Optional處理緩存返回值

最后,Java 8引入的Optional也可以用來(lái)優(yōu)雅地處理可能為空的緩存返回值。

public Optional&lt;User&gt; getUser(String userId) {
    try {
        return Optional.ofNullable(userCache.get(userId));
    } catch (Exception e) {
        return Optional.empty();
    }
}

在這里,小黑用Optional包裝了緩存的返回值。這樣一來(lái),就能優(yōu)雅地處理緩存可能返回的空值情況。

通過(guò)這些方式,結(jié)合Java 8的特性,咱們可以讓LoadingCache的使用更加高效和優(yōu)雅。這不僅提高了代碼的可讀性,還讓咱們的編程體驗(yàn)更加流暢。

實(shí)戰(zhàn)案例

小黑將通過(guò)一個(gè)具體的例子,展示如何在實(shí)際項(xiàng)目中使用LoadingCache。這個(gè)例子會(huì)模擬一個(gè)簡(jiǎn)單的場(chǎng)景,比如說(shuō),使用LoadingCache來(lái)緩存用戶(hù)的登錄次數(shù)。

假設(shè)咱們有一個(gè)應(yīng)用,需要跟蹤用戶(hù)的登錄次數(shù)。每次用戶(hù)登錄時(shí),程序會(huì)增加其登錄次數(shù)。為了提高性能,咱們用LoadingCache來(lái)緩存這些數(shù)據(jù),避免每次都查詢(xún)數(shù)據(jù)庫(kù)。

首先,小黑定義了一個(gè)模擬的用戶(hù)登錄服務(wù):

public class UserService {
    private final Map&lt;String, Integer&gt; loginCount = new ConcurrentHashMap&lt;&gt;();

    public int addLoginCount(String userId) {
        return loginCount.merge(userId, 1, Integer::sum);
    }
}

UserService userService = new UserService();

這個(gè)UserService類(lèi)有一個(gè)addLoginCount方法,用于增加特定用戶(hù)的登錄次數(shù)。

接下來(lái),小黑將展示如何使用LoadingCache來(lái)緩存登錄次數(shù):

LoadingCache<String, Integer> loginCache = CacheBuilder.newBuilder()
        .expireAfterAccess(30, TimeUnit.MINUTES) // 設(shè)置緩存30分鐘后過(guò)期
        .build(new CacheLoader<String, Integer>() {
            @Override
            public Integer load(String userId) {
                return userService.addLoginCount(userId);
            }
        });

public void userLogin(String userId) {
    int count = loginCache.getUnchecked(userId);
    System.out.println("User " + userId + " login count: " + count);
}

在這個(gè)例子中,每當(dāng)有用戶(hù)登錄,userLogin方法就會(huì)被調(diào)用。這個(gè)方法會(huì)從loginCache中獲取用戶(hù)的登錄次數(shù),如果緩存中沒(méi)有,CacheLoader會(huì)調(diào)用UserServiceaddLoginCount來(lái)獲取最新的計(jì)數(shù),然后將其存儲(chǔ)在緩存中。

總結(jié)

通過(guò)這些章節(jié),咱們了解了LoadingCache的基本原理和用法,包括如何創(chuàng)建和配置緩存,以及如何結(jié)合Java 8的特性來(lái)優(yōu)化代碼。LoadingCache不僅提供了自動(dòng)加載和刷新的強(qiáng)大功能,還有異常處理、緩存統(tǒng)計(jì)和監(jiān)聽(tīng)等高級(jí)特性。

實(shí)戰(zhàn)案例給咱們展示了LoadingCache在現(xiàn)實(shí)場(chǎng)景中的應(yīng)用。不管是緩存用戶(hù)信息還是統(tǒng)計(jì)數(shù)據(jù),LoadingCache都能大大提高性能和用戶(hù)體驗(yàn)。

技術(shù)總是在不斷進(jìn)步的,學(xué)習(xí)和掌握這些工具,能讓咱們更好地適應(yīng)未來(lái)的技術(shù)挑戰(zhàn)。希望這些內(nèi)容能激發(fā)你對(duì)Guava以及Java編程的更多探索!

以上就是Guava自加載緩存LoadingCache使用實(shí)戰(zhàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于Guava自加載緩存LoadingCache的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • ZooKeeper入門(mén)教程一簡(jiǎn)介與核心概念

    ZooKeeper入門(mén)教程一簡(jiǎn)介與核心概念

    本文是ZooKeeper入門(mén)系列教程,涵蓋ZooKeeper核心內(nèi)容,通過(guò)實(shí)例和大量圖表,結(jié)合實(shí)戰(zhàn),幫助學(xué)習(xí)者理解和運(yùn)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • springcloud之FeignClient使用詳解

    springcloud之FeignClient使用詳解

    Feign是一種聲明式、模板化的HTTP客戶(hù)端,可以簡(jiǎn)化微服務(wù)之間的遠(yuǎn)程過(guò)程調(diào)用,通過(guò)Feign,開(kāi)發(fā)者可以像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù),而無(wú)需感知這是一個(gè)HTTP請(qǐng)求,引入Feign后,微服務(wù)之間的調(diào)用流程更加簡(jiǎn)化,結(jié)合Ribbon實(shí)現(xiàn)了路由負(fù)載、超時(shí)熔斷等功能
    2024-12-12
  • JavaMail實(shí)現(xiàn)郵件發(fā)送機(jī)制

    JavaMail實(shí)現(xiàn)郵件發(fā)送機(jī)制

    這篇文章主要為大家詳細(xì)介紹了JavaMail實(shí)現(xiàn)郵件發(fā)送機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 利用Java的MyBatis框架獲取MySQL中插入記錄時(shí)的自增主鍵

    利用Java的MyBatis框架獲取MySQL中插入記錄時(shí)的自增主鍵

    這篇文章主要介紹了利用Java的MyBatis框架獲取MySQL中插入記錄的自增長(zhǎng)字段值,其中大家可以看到MyBatis支持普通SQL語(yǔ)句所帶來(lái)的遍歷,需要的朋友可以參考下
    2016-06-06
  • Java concurrency之共享鎖和ReentrantReadWriteLock_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之共享鎖和ReentrantReadWriteLock_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    本篇文章主要介紹了Java concurrency之共享鎖和ReentrantReadWriteLock,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-06-06
  • IDEA卡在”正在解析Maven依賴(lài)項(xiàng)“的解決方法

    IDEA卡在”正在解析Maven依賴(lài)項(xiàng)“的解決方法

    在創(chuàng)建新的SpringBoot項(xiàng)目時(shí),始終卡在"正在解析Maven依賴(lài)項(xiàng)…",本文小編給大家介紹了幾種相關(guān)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-11-11
  • 深入解析Spring Cloud內(nèi)置的Zuul過(guò)濾器

    深入解析Spring Cloud內(nèi)置的Zuul過(guò)濾器

    這篇文章主要給大家深入的介紹了Spring Cloud內(nèi)置的Zuul過(guò)濾器的相關(guān)資料,文中給大家介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • IDEA運(yùn)行導(dǎo)入的javaweb項(xiàng)目tomcat正常,但是運(yùn)行失敗404問(wèn)題

    IDEA運(yùn)行導(dǎo)入的javaweb項(xiàng)目tomcat正常,但是運(yùn)行失敗404問(wèn)題

    這篇文章主要介紹了IDEA運(yùn)行導(dǎo)入的javaweb項(xiàng)目tomcat正常但是運(yùn)行失敗404問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java實(shí)現(xiàn)單人版五子棋游戲

    java實(shí)現(xiàn)單人版五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)五子棋小游戲的相關(guān)資料,十分簡(jiǎn)單實(shí)用,有不錯(cuò)的參考借鑒價(jià)值,推薦給大家,需要的朋友可以參考下
    2016-02-02
  • 使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼

    使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼

    這篇文章主要介紹了使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼,主要基于JWT的身份認(rèn)證,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

浦北县| 秀山| 兴安县| 东阳市| 武邑县| 兴义市| 石阡县| 景泰县| 江北区| 南靖县| 巩义市| 黄浦区| 友谊县| 襄汾县| 盈江县| 平原县| 团风县| 抚顺县| 分宜县| 盱眙县| 河津市| 华坪县| 竹山县| 江西省| 清新县| 独山县| 霍州市| 瑞金市| 揭东县| 宜宾市| 张家港市| 赞皇县| 清涧县| 方正县| 巨野县| 信宜市| 阿瓦提县| 洛扎县| 陆丰市| 开封市| 宁安市|