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

SpringBoot使用阿里oss實(shí)現(xiàn)文件上傳的流程步驟

 更新時(shí)間:2025年01月16日 10:53:04   作者:ueanaIU瀟瀟子  
云服務(wù)指的就是通過互聯(lián)網(wǎng)對外提供的各種各樣的服務(wù),比如像:語音服務(wù)、短信服務(wù)、郵件服務(wù)、視頻直播服務(wù)、文字識(shí)別服務(wù)、對象存儲(chǔ)服務(wù)等等,本文通過代碼示例和圖文給大家介紹了SpringBoot使用阿里oss實(shí)現(xiàn)文件上傳的流程步驟,需要的朋友可以參考下

一、準(zhǔn)備

1.介紹

阿里云是阿里巴巴集團(tuán)旗下全球領(lǐng)先的云計(jì)算公司,也是國內(nèi)最大的云服務(wù)提供商 。

云服務(wù)指的就是通過互聯(lián)網(wǎng)對外提供的各種各樣的服務(wù),比如像:語音服務(wù)、短信服務(wù)、郵件服務(wù)、視頻直播服務(wù)、文字識(shí)別服務(wù)、對象存儲(chǔ)服務(wù)等等。

當(dāng)我們在項(xiàng)目開發(fā)時(shí)需要用到某個(gè)或某些服務(wù),就不需要自己來開發(fā)了,可以直接使用阿里云提供好的這些現(xiàn)成服務(wù)就可以了。比如:在項(xiàng)目開發(fā)當(dāng)中,我們要實(shí)現(xiàn)一個(gè)短信發(fā)送的功能,如果我們項(xiàng)目組自己實(shí)現(xiàn),將會(huì)非常繁瑣,因?yàn)槟阈枰透鱾€(gè)運(yùn)營商進(jìn)行對接。而此時(shí)阿里云完成了和三大運(yùn)營商對接,并對外提供了一個(gè)短信服務(wù)。我們項(xiàng)目組只需要調(diào)用阿里云提供的短信服務(wù),就可以很方便的來發(fā)送短信了。這樣就降低了我們項(xiàng)目的開發(fā)難度,同時(shí)也提高了項(xiàng)目的開發(fā)效率。(大白話:別人幫我們實(shí)現(xiàn)好了功能,我們只要調(diào)用即可)

云服務(wù)提供商給我們提供的軟件服務(wù)通常是需要收取一部分費(fèi)用的。

阿里云對象存儲(chǔ)OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。使用OSS,您可以通過網(wǎng)絡(luò)隨時(shí)存儲(chǔ)和調(diào)用包括文本、圖片、音頻和視頻等在內(nèi)的各種文件。

在我們使用了阿里云OSS對象存儲(chǔ)服務(wù)之后,我們的項(xiàng)目當(dāng)中如果涉及到文件上傳這樣的業(yè)務(wù),在前端進(jìn)行文件上傳并請求到服務(wù)端時(shí),在服務(wù)器本地磁盤當(dāng)中就不需要再來存儲(chǔ)文件了。我們直接將接收到的文件上傳到oss,由 oss幫我們存儲(chǔ)和管理,同時(shí)阿里云的oss存儲(chǔ)服務(wù)還保障了我們所存儲(chǔ)內(nèi)容的安全可靠。

2.開通云服務(wù)

 在開通云服務(wù)前,我們需要自己注冊并登錄阿里云。

2.1.通過控制臺(tái)找到對象存儲(chǔ)OSS服務(wù)

選擇要開通的服務(wù)

如果是第一次訪問,還需要開通對象存儲(chǔ)服務(wù)OSS 

2.2.創(chuàng)建一個(gè)Bucket

 開通OSS服務(wù)之后,就可以進(jìn)入到阿里云對象存儲(chǔ)的控制臺(tái),開通OSS服務(wù)之后,就可以進(jìn)入到阿里云對象存儲(chǔ)的控制臺(tái)

輸入Bucket的相關(guān)信息 

其他的信息,配置項(xiàng)使用默認(rèn)的即可。 

2.3. 配置AccessKey

2.3.1 創(chuàng)建

點(diǎn)擊 "AccessKey管理",進(jìn)入到管理頁面。

點(diǎn)擊 "創(chuàng)建AccessKey" 

 2.3.2. 配置

管理員身份打開CMD命令行,執(zhí)行如下命令,配置系統(tǒng)的環(huán)境變量。

set OSS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
set OSS_ACCESS_KEY_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

注意:將上述的ACCESS_KEY_ID  與 ACCESS_KEY_SECRET 的值一定要替換成自己的 。 

執(zhí)行如下命令,讓更改生效。 

setx OSS_ACCESS_KEY_ID "%OSS_ACCESS_KEY_ID%"
setx OSS_ACCESS_KEY_SECRET "%OSS_ACCESS_KEY_SECRET%"

執(zhí)行如下命令,驗(yàn)證環(huán)境變量是否生效。 

echo %OSS_ACCESS_KEY_ID%
echo %OSS_ACCESS_KEY_SECRET%

二、項(xiàng)目實(shí)現(xiàn) 

1、導(dǎo)入依賴

具體導(dǎo)入依賴包 可以去官網(wǎng)查看:OSS Java SDK兼容性和示例代碼_對象存儲(chǔ)(OSS)-阿里云幫助中心

<!--阿里云OSS依賴-->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.17.4</version>
</dependency>
 
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>

2、使用案例

將官方提供的入門程序,復(fù)制過來,將里面的參數(shù)值改造成我們自己的即可。代碼如下:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.nio.file.Files;
 
public class Demo {
 
    public static void main(String[] args) throws Exception {
        // Endpoint以華東1(杭州)為例,其它Region請按實(shí)際情況填寫。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫B(tài)ucket名稱,例如examplebucket。
        String bucketName = "java-ai";
        // 填寫Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。
        String objectName = "001.jpg";
        // 填寫B(tài)ucket所在地域。以華東1(杭州)為例,Region填寫為cn-hangzhou。
        String region = "cn-beijing";
 
        // 創(chuàng)建OSSClient實(shí)例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)
            .build();
 
        try {
            File file = new File("C:\\Users\\deng\\Pictures\\1.jpg");
            byte[] content = Files.readAllBytes(file.toPath());
 
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

需要將上面的 endpoint ,bucketName,objectName,file 都需要改成自己的。

  • endpoint:阿里云OSS中的bucket對應(yīng)的域名
  • bucketName:Bucket名稱
  • objectName:對象名稱,在Bucket中存儲(chǔ)的對象的名稱
  • region:bucket所屬區(qū)域

運(yùn)行demo,沒有報(bào)錯(cuò)。我們就可以去對應(yīng)的bucket下查看文件是否上傳成功

3、實(shí)際使用

3.1.編寫阿里云OSS上傳文件工具類(由官方的示例代碼改造而來)

官網(wǎng)上文件的操作還有很多的案例代碼,感興趣的可以自己去看一下

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
 
@Component
public class AliyunOSSOperator {
 
    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    private String bucketName = "java-ai";
    private String region = "cn-beijing";
 
    public String upload(byte[] content, String originalFilename) throws Exception {
        // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
 
        // 填寫Object完整路徑,例如202406/1.png。Object完整路徑中不能包含Bucket名稱。
        //獲取當(dāng)前系統(tǒng)日期的字符串,格式為 yyyy/MM
        String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));
        //生成一個(gè)新的不重復(fù)的文件名
        String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = dir + "/" + newFileName;
 
        // 創(chuàng)建OSSClient實(shí)例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
 
        try {
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
        } finally {
            ossClient.shutdown();
        }
 
        return endpoint.split("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + objectName;
    }
 
}

3.2. 實(shí)現(xiàn)UploadController代碼 

import com.itheima.pojo.Result;
import com.itheima.utils.AliyunOSSOperator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.UUID;
 
@Slf4j
@RestController
public class UploadController {
    
    @Autowired
    private AliyunOSSOperator aliyunOSSOperator;
 
    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws Exception {
        log.info("上傳文件:{}", file);
        if (!file.isEmpty()) {
            // 生成唯一文件名
            String originalFilename = file.getOriginalFilename();
            String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
            String uniqueFileName = UUID.randomUUID().toString().replace("-", "") + extName;
            // 上傳文件
            String url = aliyunOSSOperator.upload(file.getBytes(), uniqueFileName);
            return Result.success(url);
        }
        return Result.error("上傳失敗");
    }
 
}

3.3.3 配置阿里云oss(可選)

在AliyunOSS操作的工具類中,我們直接將 endpoint、bucketName參數(shù)直接在java文件中寫死了。對于這些容易變動(dòng)的參數(shù),我們可以將其配置在配置文件中,然后通過從yml文件中讀取外部配置的屬性。

具體實(shí)現(xiàn)代碼如下:

1.添加AliyunOss配置到application.yml

#阿里云OSS
aliyun:
  oss:
    endpoint: https://oss-cn-beijing.aliyuncs.com
    bucketName: java-ai
    region: cn-beijing

 2.修改AliyunOSSOperator代碼  

方式一:@Value注解

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
 
@Component
public class AliyunOSSOperator {
 
    //方式一: 通過@Value注解一個(gè)屬性一個(gè)屬性的注入
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
    
    @Value("${aliyun.oss.region}")
    private String region;
 
    public String upload(byte[] content, String originalFilename) throws Exception {
        // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
 
        // 填寫Object完整路徑,例如2024/06/1.png。Object完整路徑中不能包含Bucket名稱。
        //獲取當(dāng)前系統(tǒng)日期的字符串,格式為 yyyy/MM
        String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));
        //生成一個(gè)新的不重復(fù)的文件名
        String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = dir + "/" + newFileName;
 
        // 創(chuàng)建OSSClient實(shí)例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
 
        try {
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
        } finally {
            ossClient.shutdown();
        }
 
        return endpoint.split("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + objectName;
    }
 
}

方式二: 編寫對應(yīng)配置類

如果只有一兩個(gè)屬性需要注入,而且不需要考慮復(fù)用性,使用@Value注解就可以了。

但是使用@Value注解注入配置文件的配置項(xiàng),如果配置項(xiàng)多,注入繁瑣,不便于維護(hù)管理 和 復(fù)用。我們可以直接將配置文件中配置項(xiàng)的值自動(dòng)的注入到對象的屬性中簡化這些配置參數(shù)的注入。

實(shí)現(xiàn)步驟:

1). 需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)類,且實(shí)體類中的屬性名和配置文件當(dāng)中key的名字必須要一致

比如:配置文件當(dāng)中叫endpoint,實(shí)體類當(dāng)中的屬性也得叫endpoint,另外實(shí)體類當(dāng)中的屬性還需要提供 getter / setter方法

2). 需要將實(shí)體類交給Spring的IOC容器管理,成為IOC容器當(dāng)中的bean對象

3). 在實(shí)體類上添加@ConfigurationProperties注解,并通過perfect屬性來指定配置參數(shù)項(xiàng)的前綴

具體實(shí)現(xiàn)步驟:

1). 定義實(shí)體類AliyunOSSProperties ,并交給IOC容器管理

配置類中的屬性名相同,Spring會(huì)幫我們自動(dòng)映射。yml中屬性的命名如果兩個(gè)單詞之間采用橫線連接Spring也會(huì)映射到對應(yīng)駝峰命名的字段上。比如:yml中的屬性為bucket-name或bucketName會(huì)映射到對應(yīng)配置類中的bucketName上。

 
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOSSProperties {
    private String endpoint;
    private String bucketName;
    private String region;
}

2). 修改AliyunOSSOperator 

 
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
 
@Component
public class AliyunOSSOperator {
 
    //方式一: 通過@Value注解一個(gè)屬性一個(gè)屬性的注入
    //@Value("${aliyun.oss.endpoint}")
    //private String endpoint;
    //@Value("${aliyun.oss.bucketName}")
    //private String bucketName;
    //@Value("${aliyun.oss.region}")
    //private String region;
 
    @Autowired
    private AliyunOSSProperties aliyunOSSProperties;
 
    public String upload(byte[] content, String originalFilename) throws Exception {
        String endpoint = aliyunOSSProperties.getEndpoint();
        String bucketName = aliyunOSSProperties.getBucketName();
        String region = aliyunOSSProperties.getRegion();
 
        // 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
 
        // 填寫Object完整路徑,例如2024/06/1.png。Object完整路徑中不能包含Bucket名稱。
        //獲取當(dāng)前系統(tǒng)日期的字符串,格式為 yyyy/MM
        String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));
        //生成一個(gè)新的不重復(fù)的文件名
        String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String objectName = dir + "/" + newFileName;
 
        // 創(chuàng)建OSSClient實(shí)例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
 
        try {
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
        } finally {
            ossClient.shutdown();
        }
 
        return endpoint.split("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + objectName;
    }
 
}

以上就是SpringBoot使用阿里oss實(shí)現(xiàn)文件上傳的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 阿里oss文件上傳的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Servlet 3.0/3.1 中的異步處理

    詳解Servlet 3.0/3.1 中的異步處理

    這篇文章主要介紹了詳解Servlet 3.0/3.1 中的異步處理,實(shí)例分析了servlet 3.0異步處理的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • springboot返回modelandview頁面的實(shí)例

    springboot返回modelandview頁面的實(shí)例

    這篇文章主要介紹了springboot返回modelandview頁面的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 基于Java中字符串indexof() 的使用方法

    基于Java中字符串indexof() 的使用方法

    今天小編就為大家分享一篇基于Java中字符串indexof() 的使用方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java 串口通信實(shí)現(xiàn)流程示例

    java 串口通信實(shí)現(xiàn)流程示例

    這篇文章主要介紹了java 串口通信實(shí)現(xiàn)流程示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java mybatisplus批量新增和更新方式

    java mybatisplus批量新增和更新方式

    文章主要介紹使用Javamapper框架通過XML配置實(shí)現(xiàn)批量新增和更新操作,包含單字段更新(如刪除標(biāo)記)及多字段更新的方法,但內(nèi)容存在格式混亂問題,需進(jìn)一步明確具體實(shí)現(xiàn)細(xì)節(jié)
    2025-09-09
  • 集群環(huán)境中使用ehcache_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    集群環(huán)境中使用ehcache_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了集群環(huán)境中使用ehcache的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • MyBatis配置的應(yīng)用與對比jdbc的優(yōu)勢

    MyBatis配置的應(yīng)用與對比jdbc的優(yōu)勢

    這篇文章主要介紹了MyBatis配置的使用與相對于jdbc的優(yōu)勢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java判斷兩個(gè)集合是否具有交集及如何獲得交集詳解

    Java判斷兩個(gè)集合是否具有交集及如何獲得交集詳解

    這篇文章主要給大家介紹了關(guān)于Java判斷兩個(gè)集合是否具有交集及如何獲得交集的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Spring Boot項(xiàng)目打包指定包名實(shí)現(xiàn)示例

    Spring Boot項(xiàng)目打包指定包名實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Spring Boot項(xiàng)目打包指定包名實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java的Netty進(jìn)階之Future和Promise詳解

    Java的Netty進(jìn)階之Future和Promise詳解

    這篇文章主要介紹了Java的Netty進(jìn)階之Future和Promise詳解,Netty 是基于 Java NIO 的異步事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用框架,使用 Netty 可以快速開發(fā)網(wǎng)絡(luò)應(yīng)用,Netty 提供了高層次的抽象來簡化 TCP 和 UDP 服務(wù)器的編程,但是你仍然可以使用底層的 API,需要的朋友可以參考下
    2023-11-11

最新評論

新晃| 云南省| 福鼎市| 江孜县| 台中县| 阿坝县| 宣武区| 台中县| 宣威市| 太白县| 温宿县| 禄丰县| 格尔木市| 美姑县| 璧山县| 保康县| 泰州市| 邢台县| 潼南县| 蛟河市| 安康市| 兰考县| 海宁市| 凤庆县| 永新县| 辉南县| 海口市| 苗栗县| 阜南县| 嘉黎县| 永年县| 宁陵县| 阿克苏市| 陆河县| 玉门市| 湘潭县| 鄂温| 江永县| 罗甸县| 万荣县| 利川市|