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

SpringBoot實(shí)現(xiàn)文件上傳下載的7種方法

 更新時(shí)間:2025年05月15日 08:19:24   作者:風(fēng)象南  
文件上傳下載功能是Web應(yīng)用中的常見需求,從簡單的用戶頭像上傳到大型文件的傳輸與共享,都需要可靠的文件處理機(jī)制,下面我們來看看SpringBoot中處理文件上傳下載的7種方法吧

文件上傳下載功能是Web應(yīng)用中的常見需求,從簡單的用戶頭像上傳到大型文件的傳輸與共享,都需要可靠的文件處理機(jī)制。

SpringBoot作為流行的Java應(yīng)用開發(fā)框架,提供了多種實(shí)現(xiàn)文件上傳下載的工具和方案。

本文將介紹七種在SpringBoot中處理文件上傳下載的工具。

1. MultipartFile接口 - 基礎(chǔ)文件上傳處理

SpringBoot內(nèi)置的MultipartFile接口是處理文件上傳的基礎(chǔ)工具,簡單易用且功能完善。

配置方式

application.propertiesapplication.yml中配置上傳參數(shù):

spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
      enabled: true

使用示例

@RestController
@RequestMapping("/api/files")
public class FileUploadController {
    
    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "請(qǐng)選擇要上傳的文件";
        }
        
        try {
            // 獲取文件名
            String fileName = file.getOriginalFilename();
            // 獲取文件類型
            String contentType = file.getContentType();
            // 獲取文件內(nèi)容
            byte[] bytes = file.getBytes();
            
            // 創(chuàng)建存儲(chǔ)路徑
            Path path = Paths.get("uploads/" + fileName);
            Files.createDirectories(path.getParent());
            
            // 保存文件
            Files.write(path, bytes);
            
            return "文件上傳成功: " + fileName;
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上傳失敗: " + e.getMessage();
        }
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • SpringBoot原生支持,無需額外依賴
  • 配置簡單,API友好
  • 支持多種文件操作方法

適用場景

  • 小到中型文件的上傳
  • 基礎(chǔ)的文件處理需求
  • 快速開發(fā)原型

2. Apache Commons FileUpload - 靈活的文件上傳庫

雖然SpringBoot內(nèi)部已集成文件上傳功能,但在某些場景下,可能需要Apache Commons FileUpload提供的更多高級(jí)特性。

配置方式

添加依賴:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.5</version>
</dependency>

配置Bean:

@Bean
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setDefaultEncoding("UTF-8");
    resolver.setMaxUploadSize(10485760); // 10MB
    resolver.setMaxUploadSizePerFile(2097152); // 2MB
    return resolver;
}

使用示例

@RestController
@RequestMapping("/api/commons")
public class CommonsFileUploadController {
    
    @PostMapping("/upload")
    public String handleFileUpload(HttpServletRequest request) throws Exception {
        // 判斷是否包含文件上傳
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
            return "不是有效的文件上傳請(qǐng)求";
        }
        
        // 創(chuàng)建上傳器
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        // 解析請(qǐng)求
        List<FileItem> items = upload.parseRequest(request);
        
        for (FileItem item : items) {
            if (!item.isFormField()) {
                // 處理文件項(xiàng)
                String fileName = FilenameUtils.getName(item.getName());
                File uploadedFile = new File("uploads/" + fileName);
                item.write(uploadedFile);
                return "文件上傳成功: " + fileName;
            }
        }
        
        return "未找到要上傳的文件";
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • 提供更細(xì)粒度的控制
  • 支持文件上傳進(jìn)度監(jiān)控
  • 可自定義文件存儲(chǔ)策略

適用場景

  • 需要對(duì)上傳過程進(jìn)行細(xì)粒度控制
  • 大文件上傳并監(jiān)控進(jìn)度
  • 遺留系統(tǒng)集成

3. Spring Resource抽象 - 統(tǒng)一資源訪問

Spring的Resource抽象提供了對(duì)不同來源資源的統(tǒng)一訪問方式,非常適合文件下載場景。

使用示例

@RestController
@RequestMapping("/api/resources")
public class ResourceDownloadController {
    
    @GetMapping("/download/{fileName:.+}")
    public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) {
        try {
            // 創(chuàng)建文件資源
            Path filePath = Paths.get("uploads/" + fileName);
            Resource resource = new UrlResource(filePath.toUri());
            
            // 檢查資源是否存在
            if (resource.exists()) {
                return ResponseEntity.ok()
                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="" + resource.getFilename() + """)
                    .contentType(MediaType.APPLICATION_OCTET_STREAM)
                    .body(resource);
            } else {
                return ResponseEntity.notFound().build();
            }
        } catch (Exception e) {
            return ResponseEntity.internalServerError().build();
        }
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • 提供統(tǒng)一的資源抽象,易于切換資源來源
  • 與Spring生態(tài)系統(tǒng)無縫集成
  • 支持多種協(xié)議和位置的資源

適用場景

  • 需要從多種來源提供下載的場景
  • RESTful API文件下載
  • 動(dòng)態(tài)生成的資源下載

4. 基于ResponseEntity的下載響應(yīng)

SpringBoot中,ResponseEntity類型可以精確控制HTTP響應(yīng),為文件下載提供完善的HTTP頭信息。

使用示例

@RestController
@RequestMapping("/api/download")
public class FileDownloadController {
    
    @GetMapping("/file/{fileName:.+}")
    public ResponseEntity<byte[]> downloadFile(@PathVariable String fileName) {
        try {
            Path filePath = Paths.get("uploads/" + fileName);
            byte[] data = Files.readAllBytes(filePath);
            
            HttpHeaders headers = new HttpHeaders();
            headers.setContentDisposition(ContentDisposition.attachment()
                    .filename(fileName, StandardCharsets.UTF_8).build());
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentLength(data.length);
            
            return new ResponseEntity<>(data, headers, HttpStatus.OK);
        } catch (IOException e) {
            return ResponseEntity.notFound().build();
        }
    }
    
    @GetMapping("/dynamic-pdf")
    public ResponseEntity<byte[]> generatePdf() {
        // 假設(shè)這里生成了PDF文件的字節(jié)數(shù)組
        byte[] pdfContent = generatePdfService.createPdf();
        
        HttpHeaders headers = new HttpHeaders();
        headers.setContentDisposition(ContentDisposition.attachment()
                .filename("generated-report.pdf").build());
        headers.setContentType(MediaType.APPLICATION_PDF);
        
        return new ResponseEntity<>(pdfContent, headers, HttpStatus.OK);
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • 完全控制HTTP響應(yīng)和頭信息
  • 適合各種資源類型的下載
  • 支持動(dòng)態(tài)生成的文件下載

適用場景

  • 需要精確控制HTTP響應(yīng)的場景
  • 動(dòng)態(tài)生成的文件下載
  • 自定義緩存策略的文件服務(wù)

5. 基于Servlet的原生文件操作

在某些情況下,可能需要使用原生Servlet API進(jìn)行更底層的文件操作。

使用示例

@WebServlet("/servlet/download")
public class FileDownloadServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        
        String fileName = request.getParameter("file");
        if (fileName == null || fileName.isEmpty()) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }
        
        File file = new File("uploads/" + fileName);
        if (!file.exists()) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        
        // 設(shè)置響應(yīng)頭
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename="" + fileName + """);
        response.setContentLength((int) file.length());
        
        // 寫入文件內(nèi)容
        try (FileInputStream input = new FileInputStream(file);
             ServletOutputStream output = response.getOutputStream()) {
            
            byte[] buffer = new byte[4096];
            int bytesRead;
            
            while ((bytesRead = input.read(buffer)) != -1) {
                output.write(buffer, 0, bytesRead);
            }
        }
    }
}

要在SpringBoot中啟用Servlet:

@SpringBootApplication
@ServletComponentScan  // 掃描Servlet組件
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • 對(duì)文件流操作有最大的控制權(quán)
  • 可以實(shí)現(xiàn)漸進(jìn)式下載和流式處理
  • 對(duì)內(nèi)存使用更加高效

適用場景

  • 大文件處理
  • 需要細(xì)粒度控制IO操作
  • 與遺留Servlet系統(tǒng)集成

6. 云存儲(chǔ)服務(wù)SDK集成

對(duì)于生產(chǎn)環(huán)境,將文件存儲(chǔ)在專業(yè)的存儲(chǔ)服務(wù)中通常是更好的選擇,如AWS S3、阿里云OSS、七牛云等。

配置方式(以阿里云OSS為例)

添加依賴:

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>

配置客戶端:

@Configuration
public class OssConfig {
    
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
    
    @Bean
    public OSS ossClient() {
        return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }
    
    @Bean
    public String bucketName() {
        return bucketName;
    }
}

使用示例

@RestController
@RequestMapping("/api/oss")
public class OssFileController {
    
    @Autowired
    private OSS ossClient;
    
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
    
    @PostMapping("/upload")
    public String uploadToOss(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "請(qǐng)選擇文件";
        }
        
        try {
            String fileName = UUID.randomUUID().toString() + "-" + file.getOriginalFilename();
            
            // 上傳文件流
            ossClient.putObject(bucketName, fileName, file.getInputStream());
            
            // 生成訪問URL
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
            URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);
            
            return "文件上傳成功,訪問URL: " + url.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "文件上傳失敗: " + e.getMessage();
        }
    }
    
    @GetMapping("/download")
    public ResponseEntity<byte[]> downloadFromOss(@RequestParam("key") String objectKey) {
        try {
            // 獲取文件
            OSSObject ossObject = ossClient.getObject(bucketName, objectKey);
            
            // 讀取文件內(nèi)容
            try (InputStream is = ossObject.getObjectContent()) {
                byte[] content = IOUtils.toByteArray(is);
                
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
                headers.setContentDisposition(ContentDisposition.attachment()
                        .filename(objectKey).build());
                
                return new ResponseEntity<>(content, headers, HttpStatus.OK);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • 高可用性和可擴(kuò)展性
  • 內(nèi)置的安全機(jī)制和訪問控制
  • 減輕應(yīng)用服務(wù)器的壓力

適用場景

  • 生產(chǎn)環(huán)境的文件存儲(chǔ)
  • 需要高可用性和CDN分發(fā)的場景
  • 大規(guī)模用戶上傳的應(yīng)用

7. 基于Apache Tika的文件類型檢測與驗(yàn)證

在文件上傳場景中,確保文件類型安全是至關(guān)重要的。Apache Tika是一個(gè)內(nèi)容分析工具包,能夠準(zhǔn)確檢測文件的真實(shí)MIME類型,不僅依賴于文件擴(kuò)展名,從而提高應(yīng)用的安全性。

配置方式

添加Apache Tika依賴:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.8.0</version>
</dependency>

使用示例

創(chuàng)建文件驗(yàn)證服務(wù):

@Service
public class FileValidationService {
    
    private Tika tika = new Tika();
    
    // 驗(yàn)證文件類型
    public boolean isValidFileType(MultipartFile file, List<String> allowedTypes) throws IOException {
        String detectedType = detectFileType(file);
        return allowedTypes.stream().anyMatch(type -> detectedType.startsWith(type));
    }
    
    // 檢測文件類型
    public String detectFileType(MultipartFile file) throws IOException {
        try (InputStream is = file.getInputStream()) {
            return tika.detect(is);
        }
    }
    
    // 提取文件內(nèi)容
    public String extractContent(MultipartFile file) throws IOException, TikaException, SAXException {
        try (InputStream is = file.getInputStream()) {
            return tika.parseToString(is);
        }
    }
    
    // 提取文件元數(shù)據(jù)
    public Metadata extractMetadata(MultipartFile file) throws IOException, TikaException, SAXException {
        Metadata metadata = new Metadata();
        metadata.set(Metadata.RESOURCE_NAME_KEY, file.getOriginalFilename());
        
        try (InputStream is = file.getInputStream()) {
            Parser parser = new AutoDetectParser();
            ContentHandler handler = new DefaultHandler();
            ParseContext context = new ParseContext();
            parser.parse(is, handler, metadata, context);
            return metadata;
        }
    }
}

安全文件上傳控制器:

@RestController
@RequestMapping("/api/secure-upload")
public class SecureFileUploadController {
    
    @Autowired
    private FileValidationService fileValidationService;
    
    private static final List<String> ALLOWED_DOCUMENT_TYPES = Arrays.asList(
        "application/pdf", 
        "application/msword", 
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "application/vnd.ms-excel",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "text/plain"
    );
    
    private static final List<String> ALLOWED_IMAGE_TYPES = Arrays.asList(
        "image/jpeg", 
        "image/png", 
        "image/gif", 
        "image/tiff"
    );
    
    @PostMapping("/document")
    public ResponseEntity<Map<String, Object>> uploadDocument(@RequestParam("file") MultipartFile file) {
        Map<String, Object> response = new HashMap<>();
        
        try {
            // 檢測文件類型
            String detectedType = fileValidationService.detectFileType(file);
            response.put("detectedType", detectedType);
            
            // 驗(yàn)證文件類型
            if (!fileValidationService.isValidFileType(file, ALLOWED_DOCUMENT_TYPES)) {
                response.put("success", false);
                response.put("message", "文件類型不允許: " + detectedType);
                return ResponseEntity.badRequest().body(response);
            }
            
            // 提取文件內(nèi)容(視文件類型)
            String content = fileValidationService.extractContent(file);
            response.put("contentPreview", content.length() > 200 ? 
                        content.substring(0, 200) + "..." : content);
            
            // 提取元數(shù)據(jù)
            Metadata metadata = fileValidationService.extractMetadata(file);
            Map<String, String> metadataMap = new HashMap<>();
            Arrays.stream(metadata.names()).forEach(name -> 
                            metadataMap.put(name, metadata.get(name)));
            response.put("metadata", metadataMap);
            
            // 保存文件
            String fileName = UUID.randomUUID().toString() + "-" + file.getOriginalFilename();
            Path path = Paths.get("secure-uploads/" + fileName);
            Files.createDirectories(path.getParent());
            Files.write(path, file.getBytes());
            
            response.put("success", true);
            response.put("message", "文件上傳成功");
            response.put("filename", fileName);
            
            return ResponseEntity.ok(response);
            
        } catch (Exception e) {
            response.put("success", false);
            response.put("message", "文件處理失敗: " + e.getMessage());
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }
    
    @PostMapping("/image")
    public ResponseEntity<Map<String, Object>> uploadImage(@RequestParam("file") MultipartFile file) {
        Map<String, Object> response = new HashMap<>();
        
        try {
            // 檢測文件類型
            String detectedType = fileValidationService.detectFileType(file);
            response.put("detectedType", detectedType);
            
            // 驗(yàn)證文件類型
            if (!fileValidationService.isValidFileType(file, ALLOWED_IMAGE_TYPES)) {
                response.put("success", false);
                response.put("message", "圖片類型不允許: " + detectedType);
                return ResponseEntity.badRequest().body(response);
            }
            
            // 提取元數(shù)據(jù)(圖片信息)
            Metadata metadata = fileValidationService.extractMetadata(file);
            Map<String, String> metadataMap = new HashMap<>();
            Arrays.stream(metadata.names()).forEach(name -> 
                            metadataMap.put(name, metadata.get(name)));
            response.put("metadata", metadataMap);
            
            // 獲取圖片尺寸
            if (metadata.get(Metadata.IMAGE_WIDTH) != null && 
                metadata.get(Metadata.IMAGE_LENGTH) != null) {
                response.put("width", metadata.get(Metadata.IMAGE_WIDTH));
                response.put("height", metadata.get(Metadata.IMAGE_LENGTH));
            }
            
            // 保存文件
            String fileName = UUID.randomUUID().toString() + "-" + file.getOriginalFilename();
            Path path = Paths.get("secure-uploads/images/" + fileName);
            Files.createDirectories(path.getParent());
            Files.write(path, file.getBytes());
            
            response.put("success", true);
            response.put("message", "圖片上傳成功");
            response.put("filename", fileName);
            
            return ResponseEntity.ok(response);
            
        } catch (Exception e) {
            response.put("success", false);
            response.put("message", "圖片處理失敗: " + e.getMessage());
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }
}

優(yōu)勢與適用場景

優(yōu)勢

  • 提供準(zhǔn)確的文件類型檢測,不僅依賴擴(kuò)展名
  • 防止惡意文件上傳,增強(qiáng)應(yīng)用安全性
  • 能夠提取文件內(nèi)容和元數(shù)據(jù)
  • 支持多種文件格式的識(shí)別和內(nèi)容分析

適用場景

  • 需要高安全性要求的文件上傳系統(tǒng)
  • 內(nèi)容管理系統(tǒng)和文檔管理系統(tǒng)
  • 需要防止惡意文件上傳的場景

需要基于文件內(nèi)容自動(dòng)分類或處理的應(yīng)用

總結(jié)

無論選擇哪種方案,都應(yīng)根據(jù)應(yīng)用的具體需求、預(yù)期用戶數(shù)量和文件大小來設(shè)計(jì)文件處理系統(tǒng)。

在大多數(shù)生產(chǎn)環(huán)境中,建議采用專門的文件存儲(chǔ)服務(wù)作為主要存儲(chǔ)方案,結(jié)合其他工具提供更好的用戶體驗(yàn)。

以上就是SpringBoot實(shí)現(xiàn)文件上傳下載的7種方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot文件上傳下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java ImmutableMap的使用說明

    java ImmutableMap的使用說明

    這篇文章主要介紹了java ImmutableMap的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring事務(wù)管理中@Transactional失效的8個(gè)常見場景與解決方案

    Spring事務(wù)管理中@Transactional失效的8個(gè)常見場景與解決方案

    在實(shí)際開發(fā)中,你是否遇到過明明在方法上添加了@Transactional注解,但事務(wù)卻沒有按預(yù)期工作,本文將深入剖析Spring事務(wù)管理中常見的8個(gè)陷阱,幫助你徹底解決這些問題
    2025-11-11
  • 詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    SpringCloud Gateway是Spring Cloud的一個(gè)全新項(xiàng)目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式
    2021-06-06
  • 解讀SpringMVC?請(qǐng)求參數(shù)接收

    解讀SpringMVC?請(qǐng)求參數(shù)接收

    這篇文章主要介紹了SpringMVC請(qǐng)求參數(shù)接收的相關(guān)操作,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • java使用http實(shí)現(xiàn)文件下載學(xué)習(xí)示例

    java使用http實(shí)現(xiàn)文件下載學(xué)習(xí)示例

    這篇文章主要介紹了java使用http實(shí)現(xiàn)文件下載學(xué)習(xí)示例,需要的朋友可以參考下
    2014-04-04
  • 深入解析Spring中的@Bean注解

    深入解析Spring中的@Bean注解

    這篇文章主要介紹了深入解析Spring中的@Bean注解,Spring的@Bean注解用于告訴方法,產(chǎn)生一個(gè)Bean對(duì)象,然后這個(gè)Bean對(duì)象交給Spring管理,產(chǎn)生這個(gè)Bean對(duì)象的方法Spring只會(huì)調(diào)用一次,隨后這個(gè)Spring將會(huì)將這個(gè)Bean對(duì)象放在自己的IOC容器中,需要的朋友可以參考下
    2023-07-07
  • Spring Boot + Thymeleaf + Activiti 快速開發(fā)平臺(tái)項(xiàng)目 附源碼

    Spring Boot + Thymeleaf + Activiti 快速開發(fā)平臺(tái)項(xiàng)目 附源碼

    這篇文章主要介紹了Spring Boot + Thymeleaf + Activiti 快速開發(fā)平臺(tái)項(xiàng)目附源碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 淺談Java springboot日志管理

    淺談Java springboot日志管理

    這篇文章主要介紹了淺談Java springboot日志管理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫分表與讀寫分離的示例

    SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫分表與讀寫分離的示例

    本文主要介紹了SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫分表與讀寫分離的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • MyBatisPlus代碼生成器實(shí)踐(自己二次封裝)

    MyBatisPlus代碼生成器實(shí)踐(自己二次封裝)

    這段描述主要講解了如何配置MybatisPlus以生成代碼,并強(qiáng)調(diào)了官方文檔的重要性,同時(shí)提到了.xml文件的放置位置以及自動(dòng)掃描的功能,適合對(duì)MybatisPlus感興趣的開發(fā)者閱讀
    2026-05-05

最新評(píng)論

泗洪县| 乐陵市| 友谊县| 南投县| 桂阳县| 无极县| 五常市| 涿州市| 永年县| 微博| 兰坪| 翁牛特旗| 科尔| 宜兰县| 岚皋县| 天峻县| 德昌县| 重庆市| 海丰县| 盈江县| 金昌市| 吉安县| 景谷| 高州市| 宣化县| 富民县| 东辽县| 临潭县| 广饶县| 布尔津县| 金昌市| 大名县| 扬中市| 镇远县| 通化县| 东莞市| 巴青县| 台湾省| 庆云县| 邯郸市| 石嘴山市|