欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何實(shí)現(xiàn)內(nèi)存緩存

 更新時(shí)間:2023年08月31日 14:59:01   作者:獨(dú)愛竹子的功夫熊貓  
內(nèi)存緩存(Memory?caching)是一種常見的緩存技術(shù),它利用計(jì)算機(jī)的內(nèi)存存儲(chǔ)臨時(shí)數(shù)據(jù),以提高數(shù)據(jù)的讀取和訪問速度,本文就來和大家聊聊Java如何實(shí)現(xiàn)內(nèi)存緩存吧

一、何為內(nèi)存緩存

內(nèi)存緩存(Memory caching)是一種常見的緩存技術(shù),它利用計(jì)算機(jī)的內(nèi)存存儲(chǔ)臨時(shí)數(shù)據(jù),以提高數(shù)據(jù)的讀取和訪問速度。內(nèi)存緩存通常用于存儲(chǔ)頻繁訪問的數(shù)據(jù),以減少對(duì)慢速存儲(chǔ)介質(zhì)(如磁盤或數(shù)據(jù)庫(kù))的訪問次數(shù),從而加快系統(tǒng)的響應(yīng)速度和性能。

二、概念和應(yīng)用場(chǎng)景

緩存工作原理:內(nèi)存緩存通過在內(nèi)存中維護(hù)一個(gè)鍵值對(duì)(Key-Value)存儲(chǔ)結(jié)構(gòu),將數(shù)據(jù)存儲(chǔ)在快速訪問的內(nèi)存中。當(dāng)需要訪問數(shù)據(jù)時(shí),先查詢內(nèi)存緩存,如果數(shù)據(jù)存在于緩存中,則直接返回?cái)?shù)據(jù),避免了對(duì)慢速存儲(chǔ)介質(zhì)的訪問。

提高讀取性能:內(nèi)存緩存適用于那些需要頻繁讀取的數(shù)據(jù),例如經(jīng)常被查詢的數(shù)據(jù)庫(kù)結(jié)果集、計(jì)算結(jié)果、網(wǎng)絡(luò)請(qǐng)求的響應(yīng)等。將這些數(shù)據(jù)存儲(chǔ)在內(nèi)存緩存中,可以大大減少讀取數(shù)據(jù)的響應(yīng)時(shí)間,提高系統(tǒng)的吞吐量和性能。

數(shù)據(jù)一致性和過期策略:內(nèi)存緩存中的數(shù)據(jù)需要保持與源數(shù)據(jù)的一致性。為了避免數(shù)據(jù)過期或失效,可以采用過期策略(如基于時(shí)間的過期、LRU算法等),在一定時(shí)間或一定條件下,自動(dòng)將數(shù)據(jù)從緩存中移除或重新加載。

緩存命中率和空間管理:緩存命中率是指在讀取數(shù)據(jù)時(shí),從緩存中成功獲取數(shù)據(jù)的比率。為了提高緩存命中率,需要合理管理緩存的空間,包括設(shè)置適當(dāng)?shù)木彺娲笮?、緩存清理策略和淘汰機(jī)制等。

分布式緩存:在分布式系統(tǒng)中,內(nèi)存緩存可以用于共享數(shù)據(jù)和減輕后端服務(wù)的負(fù)載。通過將緩存數(shù)據(jù)分布式存儲(chǔ)在多臺(tái)機(jī)器的內(nèi)存中,可以提高系統(tǒng)的伸縮性和可靠性。

常見的內(nèi)存緩存實(shí)現(xiàn)包括使用緩存庫(kù)(如Memcached、Redis等)或在應(yīng)用程序中手動(dòng)管理緩存數(shù)據(jù)。具體的實(shí)現(xiàn)方式取決于使用的編程語言、框架和緩存庫(kù)。在使用內(nèi)存緩存時(shí),需要考慮數(shù)據(jù)的一致性、緩存失效處理、緩存更新策略等方面的設(shè)計(jì)和實(shí)現(xiàn)。

三、java使用map實(shí)現(xiàn)一個(gè)內(nèi)存緩存

在Java中,可以使用Map接口的實(shí)現(xiàn)類來實(shí)現(xiàn)內(nèi)存緩存。Map是一種鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),它可以用于存儲(chǔ)和檢索緩存數(shù)據(jù)。下面是使用Map實(shí)現(xiàn)內(nèi)存緩存的示例:

import java.util.Map;
import java.util.HashMap;
public class MemoryCache {
    private Map<String, Object> cache;
    public MemoryCache() {
        cache = new HashMap<>();
    }
    public void put(String key, Object value) {
        cache.put(key, value);
    }
    public Object get(String key) {
        return cache.get(key);
    }
    public void remove(String key) {
        cache.remove(key);
    }
    public void clear() {
        cache.clear();
    }
    public boolean containsKey(String key) {
        return cache.containsKey(key);
    }
    public boolean isEmpty() {
        return cache.isEmpty();
    }
    public int size() {
        return cache.size();
    }
}

在上述示例中,MemoryCache類是一個(gè)簡(jiǎn)單的內(nèi)存緩存實(shí)現(xiàn),使用HashMap作為底層的Map實(shí)現(xiàn)。它提供了一些基本的操作方法,如put用于存儲(chǔ)鍵值對(duì)、get用于獲取值、remove用于移除鍵值對(duì)等。你可以根據(jù)需要擴(kuò)展這個(gè)類,添加其他功能和更多的緩存操作。

使用示例

MemoryCache cache = new MemoryCache();
// 存儲(chǔ)數(shù)據(jù)
cache.put("key1", "value1");
cache.put("key2", 123);
// 獲取數(shù)據(jù)
String value1 = (String) cache.get("key1");
int value2 = (int) cache.get("key2");
System.out.println(value1);  // 輸出: value1
System.out.println(value2);  // 輸出: 123
// 移除數(shù)據(jù)
cache.remove("key1");
// 檢查鍵是否存在
boolean containsKey = cache.containsKey("key1");
System.out.println(containsKey);  // 輸出: false
// 清空緩存
cache.clear();
// 檢查緩存是否為空
boolean isEmpty = cache.isEmpty();
System.out.println(isEmpty);  // 輸出: true

這只是一個(gè)簡(jiǎn)單的示例,實(shí)際上,你可以根據(jù)具體需求進(jìn)行更復(fù)雜的緩存實(shí)現(xiàn),例如設(shè)置緩存的過期時(shí)間、使用線程安全的ConcurrentHashMap等。

四、如何設(shè)置一個(gè)帶過期時(shí)間的緩存

如果你想要設(shè)置緩存的過期時(shí)間,可以在實(shí)現(xiàn)緩存時(shí)結(jié)合時(shí)間戳或定時(shí)任務(wù)來實(shí)現(xiàn)。下面是一種常見的方式:

  • 在緩存項(xiàng)中添加過期時(shí)間字段:為每個(gè)緩存項(xiàng)添加一個(gè)過期時(shí)間字段,表示該緩存項(xiàng)的有效期??梢允褂脮r(shí)間戳(如System.currentTimeMillis())來表示過期時(shí)間。
  • 在獲取緩存項(xiàng)時(shí)檢查過期時(shí)間:在獲取緩存項(xiàng)時(shí),檢查當(dāng)前時(shí)間與緩存項(xiàng)的過期時(shí)間之間的關(guān)系。如果當(dāng)前時(shí)間超過了過期時(shí)間,表示緩存項(xiàng)已過期,需要重新加載或移除。
  • 定期清理過期緩存項(xiàng):可以使用定時(shí)任務(wù)或定時(shí)線程來清理過期的緩存項(xiàng)。定期遍歷緩存,檢查每個(gè)緩存項(xiàng)的過期時(shí)間,并移除過期的緩存項(xiàng)。

下面是一個(gè)示例,演示如何在Java中實(shí)現(xiàn)帶有過期時(shí)間的緩存:

import java.util.Map;
import java.util.HashMap;
public class ExpiringCache {
    private Map<String, CacheItem> cache;
    private class CacheItem {
        private Object value;
        private long expirationTime;
        public CacheItem(Object value, long expirationTime) {
            this.value = value;
            this.expirationTime = expirationTime;
        }
    }
    public ExpiringCache() {
        cache = new HashMap<>();
    }
    public void put(String key, Object value, long expirationTimeMillis) {
        long expirationTime = System.currentTimeMillis() + expirationTimeMillis;
        CacheItem item = new CacheItem(value, expirationTime);
        cache.put(key, item);
    }
    public Object get(String key) {
        CacheItem item = cache.get(key);
        if (item != null && System.currentTimeMillis() < item.expirationTime) {
            return item.value;
        }
        return null; // 緩存項(xiàng)已過期或不存在
    }
    public void remove(String key) {
        cache.remove(key);
    }
    public void clear() {
        cache.clear();
    }
    public boolean containsKey(String key) {
        return cache.containsKey(key);
    }
    public boolean isEmpty() {
        return cache.isEmpty();
    }
    public int size() {
        return cache.size();
    }
}

在上述示例中,ExpiringCache類使用內(nèi)部類CacheItem來表示緩存項(xiàng),其中包含了值和過期時(shí)間。在put方法中,計(jì)算并設(shè)置緩存項(xiàng)的過期時(shí)間。在get方法中,檢查當(dāng)前時(shí)間是否小于緩存項(xiàng)的過期時(shí)間,如果是,則返回緩存值;否則,表示緩存項(xiàng)已過期或不存在,返回null。

使用示例

ExpiringCache cache = new ExpiringCache();
// 存儲(chǔ)數(shù)據(jù),并設(shè)置過期時(shí)間為5秒
cache.put("key1", "value1", 5000);
// 獲取數(shù)據(jù)
String value1 = (String) cache.get("key1");
System.out.println(value1);  // 輸出: value1
// 5秒后獲取數(shù)據(jù)
String value2 = (String) cache.get("key1");
System.out.println(value2);  // 輸出: null,緩存項(xiàng)已過期
// 移除數(shù)據(jù)
cache.remove("key1");

請(qǐng)注意,上述示例中的實(shí)現(xiàn)是簡(jiǎn)化的,僅用于演示實(shí)現(xiàn)原理。在實(shí)際應(yīng)用中,你可能需要考慮并發(fā)訪問的線程安全性、緩存項(xiàng)的淘汰策略、定期清理的性能開銷等因素。如果需要更高級(jí)的緩存功能和性能優(yōu)化,建議使用成熟的緩存庫(kù),如Ehcache、Caffeine或Redis等,它們提供了更多的選項(xiàng)和配置。

五、如何在Java中實(shí)現(xiàn)緩存項(xiàng)的淘汰策略

在Java中實(shí)現(xiàn)緩存項(xiàng)的淘汰策略,可以結(jié)合使用LinkedHashMap或自定義數(shù)據(jù)結(jié)構(gòu)來管理緩存項(xiàng)的訪問順序,并根據(jù)一定的策略進(jìn)行淘汰。下面介紹兩種常見的淘汰策略:

最近最少使用(Least Recently Used,LRU)策略

根據(jù)緩存項(xiàng)的訪問順序,將最近最少使用的緩存項(xiàng)淘汰??梢允褂肔inkedHashMap來實(shí)現(xiàn)LRU策略,它提供了一個(gè)構(gòu)造函數(shù),可以指定緩存的初始容量、負(fù)載因子和訪問排序模式。

import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int maxSize;
    public LRUCache(int maxSize) {
        super(maxSize, 0.75f, true);
        this.maxSize = maxSize;
    }
    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > maxSize;
    }
}

在上述示例中,LRUCache繼承自LinkedHashMap,通過調(diào)用super(maxSize, 0.75f, true)構(gòu)造函數(shù)指定了初始容量、負(fù)載因子和訪問排序模式。并且重寫了removeEldestEntry方法,當(dāng)緩存大小超過maxSize時(shí),自動(dòng)移除最久未使用的緩存項(xiàng)。

最少使用(Least Frequently Used,LFU)策略

根據(jù)緩存項(xiàng)的訪問頻率,將訪問頻率最低的緩存項(xiàng)淘汰??梢允褂米远x的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)LFU策略。該數(shù)據(jù)結(jié)構(gòu)可以使用一個(gè)HashMap存儲(chǔ)緩存項(xiàng),同時(shí)使用一個(gè)優(yōu)先隊(duì)列(PriorityQueue)來按照訪問頻率進(jìn)行排序。

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
public class LFUCache<K, V> {
    private Map<K, CacheItem> cache;
    private PriorityQueue<CacheItem> queue;
    private int maxSize;
    private class CacheItem implements Comparable<CacheItem> {
        private K key;
        private V value;
        private int frequency;
        public CacheItem(K key, V value) {
            this.key = key;
            this.value = value;
            this.frequency = 0;
        }
        @Override
        public int compareTo(CacheItem other) {
            return Integer.compare(frequency, other.frequency);
        }
    }
    public LFUCache(int maxSize) {
        cache = new HashMap<>();
        queue = new PriorityQueue<>();
        this.maxSize = maxSize;
    }
    public void put(K key, V value) {
        if (cache.containsKey(key)) {
            CacheItem item = cache.get(key);
            item.value = value;
            item.frequency++;
        } else {
            if (cache.size() >= maxSize) {
                CacheItem leastFrequentItem = queue.poll();
                cache.remove(leastFrequentItem.key);
            }
            CacheItem newItem = new CacheItem(key, value);
            newItem.frequency++;
            cache.put(key, newItem);
            queue.offer(newItem);
        }
    }
    public V get(K key) {
        if (cache.containsKey(key)) {
            CacheItem item = cache.get(key);
            item.frequency++;
            return item.value;
        }
        return null; // 緩存項(xiàng)不存在
    }
    public void remove(K key) {
        if (cache.containsKey(key)) {
            CacheItem item = cache.remove(key);
            queue.remove(item);
        }
    }
    public void clear() {
        cache.clear();
        queue.clear();
    }
    public boolean containsKey(K key) {
        return cache.containsKey(key);
    }
    public boolean isEmpty() {
        return cache.isEmpty();
    }
    public int size() {
        return cache.size();
    }
}

在上述示例中,LFUCache使用了HashMap來存儲(chǔ)緩存項(xiàng),使用PriorityQueue來按照訪問頻率進(jìn)行排序。CacheItem表示緩存項(xiàng),包含了鍵、值和訪問頻率。在put方法中,根據(jù)是否存在緩存項(xiàng)進(jìn)行更新或添加,并根據(jù)緩存大小判斷是否需要淘汰頻率最低的緩存項(xiàng)。在get方法中,如果緩存項(xiàng)存在,則增加其訪問頻率并返回值。在remove方法中,移除緩存項(xiàng)時(shí)同時(shí)從優(yōu)先隊(duì)列中移除。

另外,以上示例只是簡(jiǎn)化的實(shí)現(xiàn),用于演示淘汰策略的原理。在實(shí)際應(yīng)用中,你可能需要考慮并發(fā)訪問的線程安全性、緩存項(xiàng)的精確訪問計(jì)數(shù)、淘汰策略的性能開銷等因素。此外,還有其他的淘汰策略可供選擇,例如最長(zhǎng)閑置時(shí)間(Least Idle Time)、最近訪問時(shí)間(Least Recently Accessed)等。選擇合適的淘汰策略應(yīng)根據(jù)具體的應(yīng)用場(chǎng)景和需求來決定。

六、(重點(diǎn))關(guān)于緩存項(xiàng)的精確訪問計(jì)數(shù)和線程安全性的注意事項(xiàng)

精確訪問計(jì)數(shù)

如果需要精確計(jì)數(shù)緩存項(xiàng)的訪問次數(shù),可以使用AtomicInteger或類似的線程安全原子計(jì)數(shù)器來跟蹤訪問次數(shù)。每當(dāng)緩存項(xiàng)被訪問時(shí),使用原子操作增加計(jì)數(shù)器的值,以確保并發(fā)訪問時(shí)的準(zhǔn)確性。

可以在緩存項(xiàng)的數(shù)據(jù)結(jié)構(gòu)中維護(hù)一個(gè)訪問計(jì)數(shù)字段,并在每次訪問時(shí)遞增該計(jì)數(shù)。這樣可以跟蹤每個(gè)緩存項(xiàng)的訪問頻率,并根據(jù)需要進(jìn)行淘汰。

線程安全性

如果你的緩存是在多線程環(huán)境中使用的,確保采取適當(dāng)?shù)木€程安全措施。這包括選擇線程安全的數(shù)據(jù)結(jié)構(gòu)或使用適當(dāng)?shù)耐綑C(jī)制,以保證并發(fā)操作的正確性。

如果使用自定義的數(shù)據(jù)結(jié)構(gòu)來管理緩存項(xiàng),確保在并發(fā)訪問時(shí)采取適當(dāng)?shù)耐酱胧?,例如使用synchronized關(guān)鍵字或使用并發(fā)容器(如ConcurrentHashMap)。

如果使用第三方緩存庫(kù),確保該庫(kù)具有線程安全性,并根據(jù)庫(kù)的文檔和建議正確配置和使用。

并發(fā)控制

考慮并發(fā)訪問時(shí)可能出現(xiàn)的競(jìng)態(tài)條件。例如,在更新緩存項(xiàng)時(shí),可能需要使用同步機(jī)制(如鎖)來確保一次只有一個(gè)線程可以修改緩存。

考慮緩存項(xiàng)的加載過程。如果緩存項(xiàng)不存在時(shí)需要進(jìn)行加載操作,確保只有一個(gè)線程加載緩存項(xiàng),并在加載完成后更新緩存??梢允褂秒p重檢查鎖定(Double-Checked Locking)或其他并發(fā)模式來實(shí)現(xiàn)延遲加載和避免重復(fù)加載。

性能和內(nèi)存管理

在保證線程安全性的前提下,盡量避免使用過多的同步措施,因?yàn)檫^多的同步可能會(huì)影響性能。根據(jù)具體情況,權(quán)衡線程安全性和性能之間的需求。

考慮緩存項(xiàng)的淘汰策略和存儲(chǔ)大小的管理,以避免過度占用內(nèi)存。根據(jù)應(yīng)用需求,選擇合適的淘汰策略和緩存容量限制,以確保緩存的可用性和性能。

七、(重點(diǎn))緩存項(xiàng)的數(shù)據(jù)結(jié)構(gòu)選擇和性能優(yōu)化的注意事項(xiàng)

數(shù)據(jù)結(jié)構(gòu)選擇

對(duì)于小規(guī)模的緩存,可以使用HashMap或ConcurrentHashMap作為底層數(shù)據(jù)結(jié)構(gòu)。它們提供了快速的查找和插入操作,并且具有較低的內(nèi)存開銷。

對(duì)于需要按照訪問順序進(jìn)行淘汰的緩存,可以使用LinkedHashMap,它提供了按照訪問順序排序的功能,并且易于實(shí)現(xiàn)LRU(最近最少使用)策略。

如果需要更高級(jí)的功能和性能優(yōu)化,可以考慮使用專門的緩存庫(kù),如Ehcache、Caffeine或Redis等。這些庫(kù)提供了豐富的配置選項(xiàng)、多種淘汰策略和高度優(yōu)化的性能。

存儲(chǔ)容量管理

考慮緩存的最大容量限制,避免無限制地增長(zhǎng)??梢栽O(shè)置一個(gè)合適的閾值,并根據(jù)緩存的大小進(jìn)行淘汰,以確保緩存的可用性和性能。

考慮使用大小固定的緩存池,以避免頻繁的內(nèi)存分配和釋放操作。這可以提高性能并減少內(nèi)存碎片。

命中率優(yōu)化

考慮使用布隆過濾器(Bloom Filter)來快速判斷緩存項(xiàng)是否存在,從而減少不必要的查找操作。布隆過濾器是一種可以高效判斷一個(gè)元素是否屬于一個(gè)集合的概率型數(shù)據(jù)結(jié)構(gòu)。

考慮使用二級(jí)緩存結(jié)構(gòu),例如將熱門的緩存項(xiàng)放在內(nèi)存中,將不太常用的緩存項(xiàng)放在磁盤或數(shù)據(jù)庫(kù)中。這樣可以提高內(nèi)存的利用率,并減少內(nèi)存訪問的開銷。

并發(fā)性能優(yōu)化

如果緩存在多線程環(huán)境中使用,考慮使用并發(fā)容器,如ConcurrentHashMap,以提高并發(fā)讀寫操作的性能。

考慮使用分段鎖(Segment Locking)或細(xì)粒度鎖來減小鎖的粒度,以提高并發(fā)性能。這樣可以允許多個(gè)線程同時(shí)訪問不同的緩存區(qū)域,從而減少競(jìng)爭(zhēng)。

考慮使用無鎖數(shù)據(jù)結(jié)構(gòu)或樂觀鎖來避免鎖競(jìng)爭(zhēng)。例如,可以使用java.util.concurrent.atomic包下的原子類來保證線程安全性,而無需顯式地使用鎖。

冷啟動(dòng)優(yōu)化

對(duì)于冷啟動(dòng)(Cache Cold Start)情況,即緩存項(xiàng)為空或失效時(shí)的情況,可以實(shí)現(xiàn)一些預(yù)加載機(jī)制,例如在應(yīng)用啟動(dòng)時(shí)或定期進(jìn)行緩存項(xiàng)的加載,以減少冷啟動(dòng)時(shí)的延遲。

考慮使用異步加載機(jī)制,在緩存項(xiàng)不可用時(shí),使用后臺(tái)線程進(jìn)行異步加載,以避免阻塞主線程。

監(jiān)控和調(diào)優(yōu)

實(shí)時(shí)監(jiān)控緩存的命中率、淘汰率和內(nèi)存使用情況,以及緩存訪問的性能指標(biāo)。這可以幫助你了解緩存的效果,并及時(shí)進(jìn)行調(diào)優(yōu)和優(yōu)化。

根據(jù)實(shí)際使用情況,調(diào)整緩存的配置參數(shù),如緩存容量、過期時(shí)間、淘汰策略等,以達(dá)到最佳的性能和資源利用率。

到此這篇關(guān)于Java如何實(shí)現(xiàn)內(nèi)存緩存的文章就介紹到這了,更多相關(guān)Java內(nèi)存緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-plus獲取雪花算法生成的ID并返回生成ID

    Mybatis-plus獲取雪花算法生成的ID并返回生成ID

    本文主要介紹了Mybatis-plus獲取雪花算法生成的ID并返回生成ID,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • spring boot國(guó)際化之MessageSource的使用方法

    spring boot國(guó)際化之MessageSource的使用方法

    這篇文章主要給大家介紹了spring boot國(guó)際化之MessageSource使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解Java 類的加載機(jī)制

    詳解Java 類的加載機(jī)制

    這篇文章主要介紹了Java 類的加載機(jī)制,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • 分析JVM的執(zhí)行子系統(tǒng)

    分析JVM的執(zhí)行子系統(tǒng)

    本文主要介紹了JVM執(zhí)行子系統(tǒng)。了解虛擬機(jī)是如何執(zhí)行程序的, 虛擬機(jī)怎樣運(yùn)行一個(gè)Class文件的概念模型, 可以更好的理解怎樣寫出優(yōu)秀的代碼
    2021-06-06
  • Java?NIO?通道概念選擇器使用示例詳解

    Java?NIO?通道概念選擇器使用示例詳解

    這篇文章主要為大家介紹了Java?NIO?通道概念選擇器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Spring?Boot中application配置文件的生效順序及應(yīng)用范圍

    Spring?Boot中application配置文件的生效順序及應(yīng)用范圍

    Spring?Boot的一個(gè)重要特性就是它的自動(dòng)配置,這一特性在很大程度上依賴于名稱為application的配置文件,本文將詳細(xì)介紹在Spring?Boot中,這些配置文件的加載順序以及每份文件的應(yīng)用范圍,需要的朋友可以參考下
    2024-03-03
  • Java NegativeArraySizeException異常解決方案

    Java NegativeArraySizeException異常解決方案

    這篇文章主要介紹了Java NegativeArraySizeException異常解決方案,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java this的應(yīng)用方法解析

    java this的應(yīng)用方法解析

    這篇文章主要介紹了java this的應(yīng)用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • mybatis插件pageHelper實(shí)現(xiàn)分頁效果

    mybatis插件pageHelper實(shí)現(xiàn)分頁效果

    這篇文章主要為大家詳細(xì)介紹了mybatis插件pageHelper實(shí)現(xiàn)分頁效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例

    Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例

    這篇文章主要介紹了Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論