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

Minio?上傳文件請(qǐng)求負(fù)載原理解析

 更新時(shí)間:2025年03月07日 14:06:19   作者:將臣三代  
MinIO集群通過(guò)分布式存儲(chǔ)和負(fù)載均衡機(jī)制實(shí)現(xiàn)文件上傳請(qǐng)求的分發(fā),核心原理包括數(shù)據(jù)分片和冗余、負(fù)載均衡、一致性哈希和并行處理,Java示例展示了如何實(shí)現(xiàn)文件上傳分發(fā)邏輯,感興趣的朋友一起看看吧

認(rèn)識(shí)MinIO

Minio是一個(gè)簡(jiǎn)單易用的云存儲(chǔ)服務(wù),就像是一個(gè)放在網(wǎng)絡(luò)上的大文件柜。想象一下,你有一間放滿了各種文件的房間,有時(shí)候你需要把這些文件分享給朋友或者在不同地方訪問(wèn)它們。Minio就是幫你做到這一點(diǎn)的工具,它讓你可以輕松地把文件上傳到互聯(lián)網(wǎng)上,這樣無(wú)論你在哪里,只要有網(wǎng)絡(luò),就能訪問(wèn)或分享這些文件。

MinIO 集群通過(guò)分布式存儲(chǔ)和負(fù)載均衡機(jī)制來(lái)實(shí)現(xiàn)文件上傳請(qǐng)求的分發(fā)。其核心原理包括以下幾個(gè)方面:

  • 數(shù)據(jù)分片和冗余:MinIO 使用 erasure coding 來(lái)分片和冗余存儲(chǔ)數(shù)據(jù),以提高容錯(cuò)性和數(shù)據(jù)可用性。
  • 負(fù)載均衡:上傳請(qǐng)求被分發(fā)到多個(gè)節(jié)點(diǎn),確保不會(huì)有單個(gè)節(jié)點(diǎn)成為瓶頸。
  • 一致性哈希:用于決定數(shù)據(jù)分片和副本的位置,確保數(shù)據(jù)在節(jié)點(diǎn)間均勻分布。
  • 并行處理:多節(jié)點(diǎn)并行處理上傳請(qǐng)求,提高整體性能和吞吐量。

下面是這些核心概念的詳細(xì)說(shuō)明,以及如何使用 Java 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件上傳分發(fā)邏輯。

數(shù)據(jù)分片和冗余

MinIO 使用 erasure coding 將文件分成若干個(gè)數(shù)據(jù)塊(data blocks)和若干個(gè)校驗(yàn)塊(parity blocks)。
這些塊會(huì)分布在不同的節(jié)點(diǎn)上,確保即使某些節(jié)點(diǎn)發(fā)生故障,數(shù)據(jù)仍然可以恢復(fù)。

負(fù)載均衡

MinIO 在客戶端 SDK 中實(shí)現(xiàn)了負(fù)載均衡邏輯,可以將上傳請(qǐng)求分發(fā)到不同的服務(wù)器節(jié)點(diǎn)。每個(gè)上傳請(qǐng)求都會(huì)根據(jù)一致性哈希算法選擇合適的節(jié)點(diǎn)進(jìn)行處理。

一致性哈希

一致性哈希是一種常用的分布式系統(tǒng)數(shù)據(jù)分布策略,能夠有效地處理節(jié)點(diǎn)的加入和離開,并保持?jǐn)?shù)據(jù)的均勻分布。MinIO 使用一致性哈希算法將數(shù)據(jù)塊分配到不同的節(jié)點(diǎn)上。

并行處理

MinIO 通過(guò)多線程并行處理上傳請(qǐng)求,提高整體性能。在上傳文件時(shí),文件會(huì)被分成多個(gè)塊,并行上傳到不同的節(jié)點(diǎn)。

Java 實(shí)現(xiàn)核心底層原理

以下是一個(gè)簡(jiǎn)化的 Java 代碼示例,演示如何在分布式存儲(chǔ)系統(tǒng)中實(shí)現(xiàn)文件上傳請(qǐng)求的分發(fā)邏輯。實(shí)際的 MinIO 實(shí)現(xiàn)會(huì)更加復(fù)雜,包含更多的細(xì)節(jié)和優(yōu)化。

1. 配置 MinIO 客戶端

首先,配置 MinIO 客戶端連接到 MinIO 集群節(jié)點(diǎn):

import io.minio.MinioClient;
import io.minio.errors.MinioException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class MinioUploader {
    private MinioClient minioClient;
    public MinioUploader(String endpoint, String accessKey, String secretKey) {
        this.minioClient = MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }
    public void uploadFile(String bucketName, String objectName, byte[] content) 
        throws MinioException, IOException {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(content);
        minioClient.putObject(
            PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
                    inputStream, inputStream.available(), -1)
                    .build());
        inputStream.close();
    }
    public static void main(String[] args) {
        try {
            MinioUploader uploader = new MinioUploader("http://192.168.0.200:9000", 
            "your-access-key", "your-secret-key");
            byte[] content = "Hello, MinIO!".getBytes();
            uploader.uploadFile("my-bucket", "my-object", content);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 實(shí)現(xiàn)一致性哈希

下面是一個(gè)簡(jiǎn)單的一致性哈希實(shí)現(xiàn),用于選擇上傳節(jié)點(diǎn):

import java.util.SortedMap;
import java.util.TreeMap;
public class ConsistentHashing {
    private final SortedMap<Integer, String> circle = new TreeMap<>();
    public void addNode(String node) {
        int hash = node.hashCode();
        circle.put(hash, node);
    }
    public String getNode(String key) {
        if (circle.isEmpty()) {
            return null;
        }
        int hash = key.hashCode();
        if (!circle.containsKey(hash)) {
            SortedMap<Integer, String> tailMap = circle.tailMap(hash);
            hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
        }
        return circle.get(hash);
    }
    public static void main(String[] args) {
        ConsistentHashing ch = new ConsistentHashing();
        ch.addNode("192.168.0.200:9000");
        ch.addNode("192.168.0.201:9000");
        ch.addNode("192.168.0.202:9000");
        ch.addNode("192.168.0.203:9000");
        String node = ch.getNode("my-object");
        System.out.println("Node for my-object: " + node);
    }
}

3. 集成一致性哈希到上傳邏輯

結(jié)合一致性哈希,將文件上傳分發(fā)到不同的節(jié)點(diǎn):

public class MinioUploaderWithHashing {
    private final ConsistentHashing consistentHashing = new ConsistentHashing();
    public MinioUploaderWithHashing() {
        consistentHashing.addNode("http://192.168.0.200:9000");
        consistentHashing.addNode("http://192.168.0.201:9000");
        consistentHashing.addNode("http://192.168.0.202:9000");
        consistentHashing.addNode("http://192.168.0.203:9000");
    }
    public void uploadFile(String bucketName, String objectName, byte[] content) 
        throws MinioException, IOException {
        String node = consistentHashing.getNode(objectName);
        if (node == null) {
            throw new RuntimeException("No available node found");
        }
        MinioUploader uploader = new MinioUploader(node, "your-access-key", "your-secret-key");
        uploader.uploadFile(bucketName, objectName, content);
    }
    public static void main(String[] args) {
        try {
            MinioUploaderWithHashing uploader = new MinioUploaderWithHashing();
            byte[] content = "Hello, MinIO with Consistent Hashing!".getBytes();
            uploader.uploadFile("my-bucket", "my-object", content);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

總結(jié)

通過(guò)上述步驟,您可以了解 MinIO 集群如何實(shí)現(xiàn)文件上傳請(qǐng)求的分發(fā)。核心原理包括數(shù)據(jù)分片和冗余、負(fù)載均衡、一致性哈希和并行處理。示例代碼展示了如何使用 Java 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件上傳分發(fā)邏輯。實(shí)際的 MinIO 實(shí)現(xiàn)會(huì)更加復(fù)雜,但這些基本原理是相同的。

數(shù)據(jù)分片和冗余實(shí)現(xiàn)原理

數(shù)據(jù)分片和冗余是分布式存儲(chǔ)系統(tǒng)中的關(guān)鍵概念,它們用于確保數(shù)據(jù)的高可用性和容錯(cuò)性。下面是數(shù)據(jù)分片和冗余的實(shí)現(xiàn)原理,以及如何使用原生 Java 實(shí)現(xiàn)這些概念。

數(shù)據(jù)分片和冗余實(shí)現(xiàn)原理

1. 數(shù)據(jù)分片(Sharding)

數(shù)據(jù)分片是將大文件或大數(shù)據(jù)集拆分成多個(gè)較小的部分(稱為分片),這些分片可以獨(dú)立存儲(chǔ)在不同的節(jié)點(diǎn)上。這樣可以提高讀寫性能,并且當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),只需恢復(fù)丟失的分片,而不必恢復(fù)整個(gè)數(shù)據(jù)集。

2. 數(shù)據(jù)冗余(Redundancy)

數(shù)據(jù)冗余是為了提高數(shù)據(jù)的可用性和可靠性,通過(guò)在不同節(jié)點(diǎn)上存儲(chǔ)數(shù)據(jù)的多個(gè)副本來(lái)實(shí)現(xiàn)。常見(jiàn)的冗余技術(shù)包括復(fù)制(Replication)和糾刪碼(Erasure Coding)。

  • 復(fù)制(Replication):簡(jiǎn)單地將數(shù)據(jù)復(fù)制到多個(gè)節(jié)點(diǎn)。優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是存儲(chǔ)效率低。
  • 糾刪碼(Erasure Coding):將數(shù)據(jù)分成數(shù)據(jù)塊和校驗(yàn)塊,通過(guò)特定的算法(如 Reed-Solomon 編碼)進(jìn)行編碼。
    與復(fù)制相比,糾刪碼的存儲(chǔ)效率更高,但計(jì)算復(fù)雜度也更高。

原生 Java 實(shí)現(xiàn)

下面是一個(gè)簡(jiǎn)化的 Java 示例,展示了如何實(shí)現(xiàn)數(shù)據(jù)分片和冗余。

數(shù)據(jù)分片和冗余實(shí)現(xiàn)步驟

  • 數(shù)據(jù)分片:將大文件拆分成多個(gè)較小的分片。
  • 糾刪碼編碼:將分片編碼成數(shù)據(jù)塊和校驗(yàn)塊。
  • 數(shù)據(jù)分發(fā):將數(shù)據(jù)塊和校驗(yàn)塊分發(fā)到不同的節(jié)點(diǎn)。

示例代碼

import java.io.*;
import java.util.*;
public class DataShardingAndRedundancy {
    private static final int SHARD_SIZE = 1024 * 1024; // 1MB
    private static final int DATA_SHARDS = 4;
    private static final int PARITY_SHARDS = 2;
    private static final int TOTAL_SHARDS = DATA_SHARDS + PARITY_SHARDS;
    public static void main(String[] args) throws IOException {
        String filePath = "path/to/large/file";
        byte[] fileData = readFile(filePath);
        List<byte[]> shards = shardFile(fileData);
        List<byte[]> encodedShards = encodeShards(shards);
        for (int i = 0; i < TOTAL_SHARDS; i++) {
            String shardPath = "path/to/shard" + i;
            writeFile(shardPath, encodedShards.get(i));
        }
    }
    private static byte[] readFile(String filePath) throws IOException {
        File file = new File(filePath);
        byte[] data = new byte[(int) file.length()];
        try (FileInputStream fis = new FileInputStream(file)) {
            fis.read(data);
        }
        return data;
    }
    private static List<byte[]> shardFile(byte[] fileData) {
        List<byte[]> shards = new ArrayList<>();
        int totalShards = (fileData.length + SHARD_SIZE - 1) / SHARD_SIZE;
        for (int i = 0; i < totalShards; i++) {
            int start = i * SHARD_SIZE;
            int end = Math.min(start + SHARD_SIZE, fileData.length);
            byte[] shard = Arrays.copyOfRange(fileData, start, end);
            shards.add(shard);
        }
        return shards;
    }
    private static List<byte[]> encodeShards(List<byte[]> shards) {
        List<byte[]> encodedShards = new ArrayList<>(shards);
        for (int i = 0; i < PARITY_SHARDS; i++) {
            byte[] parityShard = new byte[SHARD_SIZE];
            for (byte[] shard : shards) {
                for (int j = 0; j < shard.length; j++) {
                    parityShard[j] ^= shard[j];
                }
            }
            encodedShards.add(parityShard);
        }
        return encodedShards;
    }
    private static void writeFile(String path, byte[] data) throws IOException {
        try (FileOutputStream fos = new FileOutputStream(path)) {
            fos.write(data);
        }
    }
}

代碼說(shuō)明

  • 數(shù)據(jù)讀取:readFile 方法讀取大文件并將其存儲(chǔ)在字節(jié)數(shù)組中。
  • 數(shù)據(jù)分片:shardFile 方法將文件數(shù)據(jù)分成多個(gè)較小的分片。
  • 糾刪碼編碼:encodeShards 方法將分片編碼成數(shù)據(jù)塊和校驗(yàn)塊。在這個(gè)示例中,使用了簡(jiǎn)單的異或操
    作來(lái)生成校驗(yàn)塊。
  • 數(shù)據(jù)寫入:writeFile 方法將編碼后的數(shù)據(jù)塊和校驗(yàn)塊寫入文件。

優(yōu)化和擴(kuò)展

這個(gè)簡(jiǎn)化示例展示了基本的分片和冗余實(shí)現(xiàn),但在實(shí)際應(yīng)用中需要更多的優(yōu)化和擴(kuò)展,例如:

  • 使用高級(jí)糾刪碼算法:如 Reed-Solomon 編碼,以提高編碼和解碼效率。
  • 錯(cuò)誤處理和恢復(fù):實(shí)現(xiàn)數(shù)據(jù)塊和校驗(yàn)塊的恢復(fù)機(jī)制。
  • 分布式存儲(chǔ):將數(shù)據(jù)塊和校驗(yàn)塊分發(fā)到不同的存儲(chǔ)節(jié)點(diǎn)。

通過(guò)理解和實(shí)現(xiàn)這些基礎(chǔ)概念,可以幫助您更好地理解 MinIO 等分布式存儲(chǔ)系統(tǒng)的工作原理。

一致性算法實(shí)現(xiàn)算理?

一致性哈希算法和負(fù)載均衡在分布式系統(tǒng)中是至關(guān)重要的兩個(gè)概念。它們可以幫助分布式系統(tǒng)有效地分配請(qǐng)求和數(shù)據(jù),保證系統(tǒng)的高可用性和穩(wěn)定性。

一致性哈希算法原理

一致性哈希算法是分布式系統(tǒng)中常用的一種算法,它能夠有效地解決數(shù)據(jù)在分布式環(huán)境中的分布問(wèn)題,減少節(jié)點(diǎn)的增減對(duì)系統(tǒng)的影響。

基本原理

  • 哈希環(huán):一致性哈希算法將所有節(jié)點(diǎn)映射到一個(gè)環(huán)上,稱為哈希環(huán)。哈希環(huán)的范圍通常是哈希函數(shù)的輸出范圍,
    例如 [0, 2^32-1]。
  • 節(jié)點(diǎn)映射:將每個(gè)節(jié)點(diǎn)通過(guò)哈希函數(shù)映射到哈希環(huán)上。
  • 數(shù)據(jù)映射:將每個(gè)數(shù)據(jù)(或請(qǐng)求)通過(guò)哈希函數(shù)映射到哈希環(huán)上。
  • 節(jié)點(diǎn)查找:數(shù)據(jù)映射到哈希環(huán)上后,從該位置順時(shí)針查找最近的節(jié)點(diǎn),即為該數(shù)據(jù)的存儲(chǔ)節(jié)點(diǎn)或處理節(jié)點(diǎn)。

優(yōu)點(diǎn)

  • 平滑性:當(dāng)一個(gè)節(jié)點(diǎn)加入或離開時(shí),只有少部分?jǐn)?shù)據(jù)需要重新分配。
  • 均衡性:數(shù)據(jù)分布在節(jié)點(diǎn)間比較均勻。
  • 伸縮性:容易添加或移除節(jié)點(diǎn),適合動(dòng)態(tài)變化的分布式環(huán)境。

負(fù)載均衡原理

負(fù)載均衡用于在多個(gè)服務(wù)器節(jié)點(diǎn)之間分配工作負(fù)載,以優(yōu)化資源使用、最大化吞吐量、最小化響應(yīng)時(shí)間并避免單個(gè)節(jié)點(diǎn)的過(guò)載。

基本策略

  • 輪詢(Round Robin):按順序?qū)⒄?qǐng)求分配給每個(gè)服務(wù)器。
  • 加權(quán)輪詢(Weighted Round Robin):根據(jù)服務(wù)器權(quán)重進(jìn)行輪詢分配。
  • 最少連接(Least Connections):將請(qǐng)求分配給當(dāng)前連接數(shù)最少的服務(wù)器。
  • 一致性哈希(Consistent Hashing):基于一致性哈希算法將請(qǐng)求分配到服務(wù)器。

一致性哈希與負(fù)載均衡的結(jié)合

將一致性哈希算法應(yīng)用于負(fù)載均衡,可以有效解決動(dòng)態(tài)擴(kuò)展的問(wèn)題,并確保請(qǐng)求分配的均衡性。下面是一個(gè)使用 Java 實(shí)現(xiàn)一致性哈希負(fù)載均衡的示例。

Java 實(shí)現(xiàn)

一致性哈希實(shí)現(xiàn)

import java.util.SortedMap;
import java.util.TreeMap;
public class ConsistentHashing {
    private final SortedMap<Integer, String> circle = new TreeMap<>();
    public void addNode(String node) {
        int hash = node.hashCode();
        circle.put(hash, node);
    }
    public void removeNode(String node) {
        int hash = node.hashCode();
        circle.remove(hash);
    }
    public String getNode(String key) {
        if (circle.isEmpty()) {
            return null;
        }
        int hash = key.hashCode();
        if (!circle.containsKey(hash)) {
            SortedMap<Integer, String> tailMap = circle.tailMap(hash);
            hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
        }
        return circle.get(hash);
    }
    public static void main(String[] args) {
        ConsistentHashing ch = new ConsistentHashing();
        ch.addNode("192.168.0.200:9000");
        ch.addNode("192.168.0.201:9000");
        ch.addNode("192.168.0.202:9000");
        ch.addNode("192.168.0.203:9000");
        String node = ch.getNode("my-object");
        System.out.println("Node for my-object: " + node);
    }
}

負(fù)載均衡實(shí)現(xiàn)

結(jié)合一致性哈希實(shí)現(xiàn)負(fù)載均衡,將請(qǐng)求分配到節(jié)點(diǎn):

public class LoadBalancer {
    private final ConsistentHashing consistentHashing = new ConsistentHashing();
    public LoadBalancer() {
        consistentHashing.addNode("192.168.0.200:9000");
        consistentHashing.addNode("192.168.0.201:9000");
        consistentHashing.addNode("192.168.0.202:9000");
        consistentHashing.addNode("192.168.0.203:9000");
    }
    public String getServer(String key) {
        return consistentHashing.getNode(key);
    }
    public static void main(String[] args) {
        LoadBalancer lb = new LoadBalancer();
        String server = lb.getServer("request1");
        System.out.println("Server for request1: " + server);
    }
}

代碼說(shuō)明

  • 一致性哈希實(shí)現(xiàn):
  • addNode 方法將節(jié)點(diǎn)添加到哈希環(huán)上。
  • removeNode 方法將節(jié)點(diǎn)從哈希環(huán)上移除。
  • getNode 方法根據(jù)數(shù)據(jù)的哈希值找到對(duì)應(yīng)的節(jié)點(diǎn)。
  • 負(fù)載均衡實(shí)現(xiàn):
  • LoadBalancer 類初始化時(shí)添加多個(gè)節(jié)點(diǎn)。
  • getServer 方法根據(jù)請(qǐng)求的鍵值(如請(qǐng)求 ID)找到對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn)。

優(yōu)化和擴(kuò)展

  • 虛擬節(jié)點(diǎn):為每個(gè)物理節(jié)點(diǎn)創(chuàng)建多個(gè)虛擬節(jié)點(diǎn),進(jìn)一步平衡數(shù)據(jù)分布。
  • 權(quán)重:為不同節(jié)點(diǎn)設(shè)置權(quán)重,根據(jù)節(jié)點(diǎn)的性能和容量調(diào)整請(qǐng)求分配。

通過(guò)以上實(shí)現(xiàn)和擴(kuò)展,可以在分布式系統(tǒng)中實(shí)現(xiàn)高效的請(qǐng)求分配和負(fù)載均衡,確保系統(tǒng)的高可用性和穩(wěn)定性。

到此這篇關(guān)于Minio 上傳文件請(qǐng)求負(fù)載原理解析的文章就介紹到這了,更多相關(guān)Minio 上傳文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Optional實(shí)踐(小結(jié))

    Java Optional實(shí)踐(小結(jié))

    這篇文章主要介紹了Java Optional實(shí)踐(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • java實(shí)現(xiàn)查找PDF關(guān)鍵字所在頁(yè)碼及其坐標(biāo)

    java實(shí)現(xiàn)查找PDF關(guān)鍵字所在頁(yè)碼及其坐標(biāo)

    這篇文章主要介紹了java實(shí)現(xiàn)查找PDF關(guān)鍵字所在頁(yè)碼及其坐標(biāo)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java中HashMap和Hashtable的區(qū)別小結(jié)

    Java中HashMap和Hashtable的區(qū)別小結(jié)

    本文主要介紹了Java中HashMap和Hashtable的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 十個(gè)最常見(jiàn)的Java字符串問(wèn)題(翻譯)

    十個(gè)最常見(jiàn)的Java字符串問(wèn)題(翻譯)

    這篇文章主要介紹了十個(gè)最常見(jiàn)的Java字符串問(wèn)題(翻譯),需要的朋友可以參考下
    2015-03-03
  • Spring中的Sentinel規(guī)則持久化解析

    Spring中的Sentinel規(guī)則持久化解析

    這篇文章主要介紹了Spring中的Sentinel規(guī)則持久化解析,具體內(nèi)容包括,Sentinel規(guī)則推送三種模式介紹,原始模式,拉模式,推模式,并對(duì)基于Nacos配置中心控制臺(tái)實(shí)現(xiàn)推送進(jìn)行詳盡介紹,需要的朋友可以參考下
    2023-09-09
  • dockerfile-maven-plugin極簡(jiǎn)教程(推薦)

    dockerfile-maven-plugin極簡(jiǎn)教程(推薦)

    這篇文章主要介紹了dockerfile-maven-plugin極簡(jiǎn)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • @Transactional注解異常報(bào)錯(cuò)之多數(shù)據(jù)源詳解

    @Transactional注解異常報(bào)錯(cuò)之多數(shù)據(jù)源詳解

    這篇文章主要介紹了@Transactional注解異常報(bào)錯(cuò)之多數(shù)據(jù)源詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • mybatis中mapper.xml文件的常用屬性及標(biāo)簽講解

    mybatis中mapper.xml文件的常用屬性及標(biāo)簽講解

    這篇文章主要介紹了mybatis中mapper.xml文件的常用屬性及標(biāo)簽講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot之HandlerInterceptor攔截器的使用詳解

    SpringBoot之HandlerInterceptor攔截器的使用詳解

    這篇文章主要介紹了SpringBoot之HandlerInterceptor攔截器的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)圖片轉(zhuǎn)base64的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見(jiàn)的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下
    2023-12-12

最新評(píng)論