返回顶部
首页 > 资讯 > 后端开发 > JAVA >minio的基本使用——java
  • 538
分享到

minio的基本使用——java

java开发语言 2023-09-01 08:09:33 538人浏览 独家记忆
摘要

第一步:下载miNIO服务安装包 去官网下载:MinIO | 用于创建高性能对象存储的代码和下载内容 minio的使用文档:MinIO Object Storage for Kubernetes — MinIO Object Storag

第一步:下载miNIO服务安装包

去官网下载:MinIO | 用于创建高性能对象存储的代码和下载内容

minio的使用文档:MinIO Object Storage for Kubernetes — MinIO Object Storage for Kubernetes

MinIo有两个重要的对象,服务器minio.exe和客户端minio.client。搭建服务器用于接收文件信息,客户端用于上传文件。

官网下载有些慢

记住一点:如果是下载windows版本的,切记千万不能去双击运行,这样可能会导致最终启动失败;无论是windows还是linux都是通过命令启动的。

第二步:启动minio服务器

1.minio服务的启动命令

在windows环境下,在你的minio.exe文件所在位置的文件夹下(最好在同级路径下创建一个类似data的文件夹,用于存储数据),打开cmd命令框,

输入:minio.exe server D:\Java_study\javaEE-study\JAVA\minio\data (后面的数据存储路径文件夹是自定义的)

(如果是linux启动minio服务器,则在对应的minio存放的路径下输入:./minio server ./data)

2.访问minio服务器

打开浏览器输入上面的访问地址和端口即可访问minio服务器的ui界面

 3.minio服务端主界面简单介绍

点开任意一个桶

​ 4.纯java入门minio参考

package com.jdh.minio;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.List;import io.minio.*;import io.minio.messages.Bucket;public class FileUploader {    public static void main(String[] args) {        try {            // 创建客户端            Minioclient minioClient =                    MinioClient.builder()// api地址.endpoint("127.0.0.1",9000,true)//.endpoint("Http://127.0.0.1:9000")// 前面设置的账号密码.credentials("minioadmin", "minioadmin").build();            System.out.println(minioClient);            // 检查桶是否存在            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("test").build());            if (!found) {                // 创建桶                minioClient.makeBucket(MakeBucketArgs.builder().bucket("test").build());            }            //列出所有桶名            List buckets = minioClient.listBuckets();            for (Bucket i : buckets){                System.out.println(i.name());            }            //删除某一个桶//            minioClient.removeBucket(//                    RemoveBucketArgs.builder()//.bucket("桶名称")//.build());            System.out.println("开始你的操作");            File file = new File("D:\\Java_study\\javaEE-study\\user.xlsx");            String fileName = file.getName();            String realFileName = fileName.substring(fileName.lastIndexOf("\\")+1, fileName.lastIndexOf("."));            String fileType = fileName.substring(fileName.lastIndexOf(".")+1);            //通过路径上传一个文件            ObjectWriteResponse testDir = minioClient.uploadObject(                    UploadObjectArgs.builder().bucket("test").object("user_Path1")//文件名字.filename("D:\\Java_study\\javaEE-study\\user.xlsx")//文件存储的路径.contentType(fileType).build());            //通过文件格式上传一个文件            InputStream fileInputStream = new FileInputStream(file);            long size = file.length();            minioClient.putObject(                    PutObjectArgs.builder().bucket("test").object("user_File1").stream(fileInputStream, size, -1).contentType(fileType).build());            //文件下载,都是这种下载到指定路径            minioClient.downloadObject(DownloadObjectArgs.builder()                    .bucket("test")                    .object("user")                    .filename("D:\\Java_study\\javaEE-study\\user_test.xlsx")                    .build());        } catch (Exception e) {            e.printStackTrace();        }    }}

 第三步:java整合minio

此demo演示的是SpringBoot项目整合minio,demo中minio版本是8.0.3,但参考版本最低7.x以上。

demo项目gitee连接:https://gitee.com/java_utils_demo/java_minio_demo.git

1.创建一个springboot的项目

2.在pom里面引入对应的依赖

(新手别忘记引入springboot的父依赖)

                    org.springframework.boot            spring-boot-starter                            org.springframework.boot            spring-boot-starter-WEB                            org.springframework.boot            spring-boot-starter-test                                    io.minio            minio            8.0.3                            com.alibaba.fastJSON2            fastjson2            2.0.12                            org.projectlombok            lombok            

 3.在application.yml配置文件配置

下面的配置实际可有可无,只是在创建minio的客户端的时候需要的一些连接服务端的一些相关配置信息

server:  port: 8080# Minio配置minio:  config:    ip: 127.0.0.1 #ip地址    port: 9000  #  端口号    accessKey: minioadmin #  账号    secreTKEy: minioadmin #  密码    secure: false #如果是true,则用的是https而不是http,默认值是true    bucketName: "jdh-bucket"  # 桶的名字    downloadDir: "/data/excel"  #保存到本地的路径

 4.创建一个配置文件类

下面配置文件类就是通过spring的ConfigurationProperties注解完成配置文件中相关参数的注入

package com.jdh.minio.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@Data@ConfigurationProperties(prefix = "minio.config")public class MinioProperties {        private String ip;        private Integer port;        private String accessKey;        private String secretKey;        private String bucketName;        private String downloadDir;        private Boolean secure;}

5.封装一些简单的方法

如:获取一个minio连接客户端、文件上下传封装、创建\删除桶、列出所有桶\文件信息等

package com.jdh.minio.config;import io.minio.*;import io.minio.errors.*;import io.minio.http.Method;import io.minio.messages.Bucket;import io.minio.messages.DeleteObject;import io.minio.messages.Item;import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.util.StringUtils;import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.security.InvalidKeyException;import java.security.NoSuchAlGorithmException;import java.time.LocalDateTime;import java.time.ZonedDateTime;import java.util.List;import java.util.Map;import java.util.UUID;import java.util.concurrent.TimeUnit;@Configuration@Slf4jpublic class MinioFileUtil {    @Resource    private MinioProperties minioProperties;    private MinioClient minioClient;    //    @Bean//    public MinioClient getMinioClient(){////        String url = "http:" + minioProperties.getIp() + ":" + minioProperties.getPort();////        try {//            return new MinioClient(url, minioProperties.getAccessKey(), minioProperties.getSecretKey());//        } catch (InvalidEndpointException | InvalidPortException e) {//            e.printStackTrace();//            log.info("-----创建Minio客户端失败-----");//            return null;//        }//    }        @Bean    public MinioClient getClient() {        String url = "http:" + minioProperties.getIp() + ":" + minioProperties.getPort();        MinioClient minioClient = MinioClient.builder()                .endpoint(url)    //两种都可以,这种全路径的其实就是下面分开配置一样的//                        .endpoint(minioProperties.getIp(),minioProperties.getPort(),minioProperties.getSecure())                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())                .build();        this.minioClient = minioClient;        return minioClient;    }        public void createBucket(String bucketName) throws Exception {        if (!StringUtils.hasLength(bucketName)) {            throw new RuntimeException("创建桶的时候,桶名不能为空!");        }        // Create bucket with default region.        minioClient.makeBucket(MakeBucketArgs.builder()                .bucket(bucketName)                .build());    }        public void createBucketByRegion(String bucketName, String region) throws Exception {        if (!StringUtils.hasLength(bucketName)) {            throw new RuntimeException("创建桶的时候,桶名不能为空!");        }        MinioClient minioClient = this.getClient();        // Create bucket with specific region.        minioClient.makeBucket(MakeBucketArgs.builder()                .bucket(bucketName)                .region(region) //                .build());//        // Create object-lock enabled bucket with specific region.//        minioClient.makeBucket(//                MakeBucketArgs.builder()//                        .bucket("my-bucketname")//                        .region("us-west-1")//                        .objectLock(true)//                        .build());    }        public void renameBucket(String oldBucketName, String newBucketName) throws Exception {        if (!StringUtils.hasLength(oldBucketName) || !StringUtils.hasLength(newBucketName)) {            throw new RuntimeException("修改桶名的时候,桶名不能为空!");        }    }        public void deleteBucket(String bucketName) throws Exception {        if (!StringUtils.hasLength(bucketName)) {            throw new RuntimeException("删除桶的时候,桶名不能为空!");        }        minioClient.removeBucket(                RemoveBucketArgs.builder()                        .bucket(bucketName)                        .build());    }        public boolean checkBucketExist(String bucketName) throws Exception {        if (!StringUtils.hasLength(bucketName)) {            throw new RuntimeException("检测桶的时候,桶名不能为空!");        }        return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());    }        public List getAllBucketInfo() throws Exception {        //列出所有桶        List buckets = minioClient.listBuckets();        return buckets;    }        public Iterable> getBucketAllFile(String bucketName, String folderName, Boolean isDeep) throws Exception {        if (!StringUtils.hasLength(bucketName)) {            throw new RuntimeException("获取桶中文件列表的时候,桶名不能为空!");        }        if (!StringUtils.hasLength(folderName)) {            folderName = "";        }        System.out.println(folderName);        Iterable> listObjects = minioClient.listObjects(                ListObjectsArgs                        .builder()                        .bucket(bucketName)                        .prefix(folderName + "/")                        .recursive(isDeep)                        .build());//        for (Result result : listObjects) {//            Item item = result.get();//            System.out.println(item.objectName());//        }        return listObjects;    }        public Boolean deleteBucketFile(String bucketName, String objectName) {        if (!StringUtils.hasLength(bucketName) || !StringUtils.hasLength(objectName)) {            throw new RuntimeException("删除文件的时候,桶名或文件名不能为空!");        }        try {            minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());            return true;        } catch (Exception e) {            log.info("删除文件失败");            return false;        }    }        public Boolean deleteBucketFolder(String bucketName, String objectName, Boolean isDeep) {        if (!StringUtils.hasLength(bucketName) || !StringUtils.hasLength(objectName)) {            throw new RuntimeException("删除文件夹的时候,桶名或文件名不能为空!");        }        try {            ListObjectsArgs args = ListObjectsArgs.builder().bucket(bucketName).prefix(objectName + "/").recursive(isDeep).build();            Iterable> listObjects = minioClient.listObjects(args);            listObjects.forEach(objectResult -> {                try {                    Item item = objectResult.get();                    minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(item.objectName()).build());                } catch (Exception e) {                    log.info("删除文件夹中的文件异常", e);                }            });            return true;        } catch (Exception e) {            log.info("删除文件夹失败");            return false;        }    }        public String getFileDownloadUrl(String bucketName, String objectName, Integer expires) throws Exception {        GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()                .method(Method.GET)//下载地址的请求方式                .bucket(bucketName)                .object(objectName)                .expiry(expires, TimeUnit.SECONDS)//下载地址过期时间                .build();        String objectUrl = minioClient.getPresignedObjectUrl(args);        return objectUrl;    }        public String getFileUploadUrl(String bucketName, String objectName, Integer expires) throws Exception {        // 过期时间        ZonedDateTime zonedDateTime = ZonedDateTime.now().plusSeconds(60);        PostPolicy postPolicy = new PostPolicy(bucketName, zonedDateTime);        // 获取对象的默认权限策略        StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());        String objectPolicy = statObjectResponse.headers().get("x-amz-object-policy");        String presignedObjectUrl = minioClient.getPresignedObjectUrl(                GetPresignedObjectUrlArgs.builder()                        .bucket(bucketName)                        .object(objectName)                        .method(Method.POST)                        .expiry(expires) // 预签名的 URL 有效期为 1 小时                        .build());        MyMinioClient client = new MyMinioClient(minioClient);        return presignedObjectUrl;    }        public ObjectWriteResponse createBucketFolder(String bucketName, String folderName) throws Exception {        if (!checkBucketExist(bucketName)) {            throw new RuntimeException("必须在桶存在的情况下才能创建文件夹");        }        if (!StringUtils.hasLength(folderName)) {            throw new RuntimeException("创建的文件夹名不能为空");        }        PutObjectArgs putObjectArgs = PutObjectArgs.builder()                .bucket(bucketName)                .object(folderName + "/")                .stream(new ByteArrayInputStream(new byte[0]), 0, 0)                .build();        ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);        return objectWriteResponse;    }        public boolean getBucketFileExist(String objectName, String bucketName) throws Exception {        if (!StringUtils.hasLength(objectName) || !StringUtils.hasLength(bucketName)) {            throw new RuntimeException("检测文件的时候,文件名和桶名不能为空!");        }        try {            // 判断文件是否存在            boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()) &&                    minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build()) != null;            return exists;        } catch (ErrorResponseException e) {            log.info("文件不存在 ! Object does not exist");            return false;        } catch (Exception e) {            throw new Exception(e);        }    }        public Boolean checkBucketFolderExist(String bucketName, String objectName, Boolean isDeep) {        Iterable> results = minioClient.listObjects(                ListObjectsArgs.builder().bucket(bucketName).prefix(objectName).recursive(isDeep).build());        return results.iterator().hasNext(); // 文件夹下存在文件    }        public boolean uploadFile(MultipartFile file, String bucketName) throws Exception {        if (file == null || file.getSize() == 0 || file.isEmpty()) {            throw new RuntimeException("上传文件为空,请重新上传");        }        if (!StringUtils.hasLength(bucketName)) {            log.info("传入桶名为空,将设置默认桶名:" + minioProperties.getBucketName());            bucketName = minioProperties.getBucketName();            if (!this.checkBucketExist(minioProperties.getBucketName())) {                this.createBucket(minioProperties.getBucketName());            }        }        if (!this.checkBucketExist(bucketName)) {            throw new RuntimeException("当前操作的桶不存在!");        }        // 获取上传的文件名        String filename = file.getOriginalFilename();        assert filename != null;        //可以选择生成一个minio中存储的文件名称        String minioFilename = UUID.randomUUID().toString() + "_" + filename;        String url = "http:" + minioProperties.getIp() + ":" + minioProperties.getPort();        InputStream inputStream = file.getInputStream();        long size = file.getSize();        String contentType = file.getContentType();        // Upload known sized input stream.        minioClient.putObject(                PutObjectArgs.builder()                        .bucket(bucketName) //上传到指定桶里面                        .object(minioFilename)//文件在minio中存储的名字                        //p1:上传的文件流;p2:上传文件总大小;p3:上传的分片大小                        .stream(inputStream, size, -1) //上传分片文件流大小,如果分文件上传可以采用这种形式                        .contentType(contentType) //文件的类型                        .build());        return this.getBucketFileExist(minioFilename, bucketName);    }        public boolean uploadPath(String filePath, String bucketName) throws Exception {        File file = new File(filePath);        if (!file.isFile()) {            throw new RuntimeException("上传文件为空,请重新上传");        }        if (!StringUtils.hasLength(bucketName)) {            log.info("传入桶名为空,将设置默认桶名:" + minioProperties.getBucketName());            bucketName = minioProperties.getBucketName();            if (!this.checkBucketExist(minioProperties.getBucketName())) {                this.createBucket(minioProperties.getBucketName());            }        }        if (!this.checkBucketExist(bucketName)) {            throw new RuntimeException("当前操作的桶不存在!");        }        String minioFilename = UUID.randomUUID().toString() + "_" + file.getName();//获取文件名称        String fileType = minioFilename.substring(minioFilename.lastIndexOf(".") + 1);        minioClient.uploadObject(                UploadObjectArgs.builder()                        .bucket(bucketName)                        .object(minioFilename)//文件存储在minio中的名字                        .filename(filePath)//上传本地文件存储的路径                        .contentType(fileType)//文件类型                        .build());        return this.getBucketFileExist(minioFilename, bucketName);    }        public void downloadFile(HttpServletResponse response, String bucketName, String objectName) throws Exception {        if (response == null || !StringUtils.hasLength(bucketName) || !StringUtils.hasLength(objectName)) {            throw new RuntimeException("下载文件参数不全!");        }        if (!this.checkBucketExist(bucketName)) {            throw new RuntimeException("当前操作的桶不存在!");        }        //获取一个下载的文件输入流操作        GetObjectResponse objectResponse = minioClient.getObject(                GetObjectArgs.builder()                        .bucket(bucketName)                        .object(objectName)                        .build());        OutputStream outputStream = response.getOutputStream();        int len = 0;        byte[] buf = new byte[1024 * 8];        while ((len = objectResponse.read(buf)) != -1) {            outputStream.write(buf, 0, len);        }        if (outputStream != null) {            outputStream.close();            outputStream.flush();        }        objectResponse.close();    }        public void downloadPath(String downloadPath, String bucketName, String objectName) throws Exception {        if (downloadPath.isEmpty() || !StringUtils.hasLength(bucketName) || !StringUtils.hasLength(objectName)) {            throw new RuntimeException("下载文件参数不全!");        }        if (!new File(downloadPath).isDirectory()) {            throw new RuntimeException("本地下载路径必须是一个文件夹或者文件路径!");        }        if (!this.checkBucketExist(bucketName)) {            throw new RuntimeException("当前操作的桶不存在!");        }        downloadPath += objectName;        minioClient.downloadObject(                DownloadObjectArgs.builder()                        .bucket(bucketName) //指定是在哪一个桶下载                        .object(objectName)//是minio中文件存储的名字;本地上传的文件是user.xlsx到minio中存储的是user-minio,那么这里就是user-minio                        .filename(downloadPath)//需要下载到本地的路径,一定是带上保存的文件名;如 d:\\minio\\user.xlsx                        .build());    }}

6.对上面封装的方法进行验证

可以在controller中写http接口来进行验证,本文采用的单元测试进行验证。

package com.jdh.minio.config;import io.minio.*;import io.minio.messages.Bucket;import io.minio.messages.Item;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.mock.web.MockMultipartFile;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.commons.CommonsMultipartFile;import java.io.*;import java.util.List;import static org.junit.jupiter.api.Assertions.*;@SpringBootTestclass MinioFileUtilTest {    @Autowired    private MinioFileUtil minioFileUtil;        @Test    void createBucket() throws Exception {        minioFileUtil.createBucket("minio-file");                boolean minioFile = minioFileUtil.checkBucketExist("minio-file");        System.out.println(minioFile);    }        @Test    void createBucketByRegion() throws Exception {        minioFileUtil.createBucketByRegion("minio-file", "minio-region");        boolean minioFile = minioFileUtil.checkBucketExist("minio-file");        System.out.println(minioFile);    }        @Test    void deleteBucket() throws Exception {        minioFileUtil.deleteBucket("minio-file");        boolean minioFile = minioFileUtil.checkBucketExist("minio-file");        System.out.println(minioFile);    }        @Test    void checkBucketExist() throws Exception {        boolean test = minioFileUtil.checkBucketExist("test");        System.out.println(test);    }        @Test    void getAllBucketInfo() throws Exception {        List allBucketName = minioFileUtil.getAllBucketInfo();        allBucketName.forEach(e -> System.out.println(e.name()));    }        @Test    void getBucketAllFile() throws Exception {        Iterable> allFile = minioFileUtil.getBucketAllFile("minio-folder", "part", true);        for (Result result : allFile) {            Item item = result.get();            System.out.println(item.objectName());        }    }        @Test    void getBucketFileExist() throws Exception {        boolean fileExist = minioFileUtil.getBucketFileExist("8aa570f9-53f5-4cb5-a0d1-c122ef4e3f89_出师表.docx", "minio-bucket");        System.out.println(fileExist);    }        @Test    void deleteBucketFile() throws Exception {        Boolean b = minioFileUtil.deleteBucketFile("minio-folder", "出师表.docx");        System.out.println(b);    }        @Test    void deleteBucketFolder() throws Exception {        boolean b = minioFileUtil.deleteBucketFolder("minio-folder", "tempFile", true);        System.out.println(b);    }        @Test    void getFileDownloadUrl() throws Exception {        String fileUrl = minioFileUtil.getFileDownloadUrl("minio-bucket", "出师表.docx", 60);        System.out.println(fileUrl);    }        @Test    void getFileUploadUrl() throws Exception {        String fileUrl = minioFileUtil.getFileUploadUrl("minio-bucket", "出师表1.docx", 3600);        System.out.println(fileUrl);    }        @Test    void createBucketFolder() throws Exception {        String buckName = "minio-bucket";        String folderName = "part";        ObjectWriteResponse bucketFolder = minioFileUtil.createBucketFolder(buckName, folderName);    }        @Test    void checkBucketFolderExist() throws Exception {        Boolean tempFile = minioFileUtil.checkBucketFolderExist("minio-bucket", "down", true);        System.out.println(tempFile);    }        @Test    void uploadFile() throws Exception {        File file = new File("D:\\file\\出师表.docx");        FileInputStream fileInputStream = new FileInputStream(file);        String fileName = file.getName();        MockMultipartFile multipartFile = new MockMultipartFile(fileName, fileName, "docx", fileInputStream);        boolean uploadFile = minioFileUtil.uploadFile(multipartFile, "minio-folder");        System.out.println(uploadFile);    }        @Test    void uploadPath() throws Exception {        boolean uploadPath = minioFileUtil.uploadPath("D:\\file\\出师表.docx", "minio-bucket");        System.out.println(uploadPath);    }        @Test    void downloadFile() {        //这里可以使用模拟请求来验证    }        @Test    void downloadPath() throws Exception {        MinioClient client = minioFileUtil.getClient();        minioFileUtil.downloadPath("D:\\file\\", "minio-bucket", "8aa570f9-53f5-4cb5-a0d1-c122ef4e3f89_出师表.docx");    }}

7.验证结果

通过访问minio的服务端界面查看功能是否验证通过

来源地址:https://blog.csdn.net/qq_45778079/article/details/131572131

--结束END--

本文标题: minio的基本使用——java

本文链接: https://lsjlt.com/news/387939.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • minio的基本使用——java
    第一步:下载minio服务安装包 去官网下载:MinIO | 用于创建高性能对象存储的代码和下载内容 minio的使用文档:MinIO Object Storage for Kubernetes — MinIO Object Storag...
    99+
    2023-09-01
    java 开发语言
  • Minio基本介绍及如何搭建Minio集群
    目录一、Minio介绍1.1 Minio简介1.2 部署方式:1.3 Minio官网二、Minio集群2.1 Minio集群原理2.2 术语解释2.3 纠删码2.4 Minio集群搭...
    99+
    2024-04-02
  • Minio使用
    MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Amazon S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。 MinIO...
    99+
    2023-08-17
    java 数据库 redis
  • Java中Jedis基本使用
    在前面我们已经学习了Redis命令行客户端redis-cli的使用,接下来我们了解一下Redis基于Java编程语言的客户端。 在Java语言体系下,有三个常用的Redis客户端Je...
    99+
    2024-04-02
  • Java NIO的基本使用实例
    这篇文章主要介绍“Java NIO的基本使用实例”,在日常操作中,相信很多人在Java NIO的基本使用实例问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java NIO的基本使用实例”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • Redis在Java中的基本使用
    本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实例 2、对于JedisPool...
    99+
    2023-08-21
    redis java 数据库
  • Java中JSR303的基本使用详情
    目录1.关于JSR-3032. 基本使用3. 级联验证4. 分组验证4.1定义接口,充当标识4.2 指定校验的组5. 组序列6. 自定义校验注解7. 校验结果的处理7.1 全局异常处...
    99+
    2024-04-02
  • MinIO的安装与使用
    MinIO的安装与使用 一、MinIO是什么?二、MinIO安装(centos7)2.1 下载MinIO2.2 启动MinIO2.3 修改配置2.4 编写启动脚本,以及加入到systemctl中 三、Springboot集成Mi...
    99+
    2023-08-18
    linux 开发语言 java 服务器
  • MinIO介绍使用
    MinIO介绍使用 MinIO 介绍 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。 MinIO 英文官网 MinIO 中文官网 注意:中...
    99+
    2023-09-02
    docker linux java
  • Java Spring JdbcTemplate基本使用详解
    目录JdbcTemplate概述JdbcTemplate开发步骤JdbcTemplate快速入门Spring产生JdbcTemplate对象JdbcTemplate概述 它是spri...
    99+
    2024-04-02
  • 使用PHP操作MinIO
    最近实验了下MinIO,发现这个分布式存储还是很好用的,具体不做赘述。此处记录下使用PHP操作存储桶下的文件及文件夹。 我使用了yii2框架(其实并没有使用到yii中从函数),操作minio的前提是要先下载一个模块:aws-sdk-p...
    99+
    2023-08-31
    php 开发语言 MinIO
  • Java Map的基本用法
    Java Map接口 (推荐学习:java课程)java.util.Map 接口 查找表Map 体现的结构是一个多行两列的表格,左列称为key 右列称为value. Map 总是根据key来获取...
    99+
    2016-01-24
    java教程 Java
  • Java基础之详解基本数据类型的使用
    一、整型 主要扩展一下不同进制的整型 二进制、八进制、十进制、十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写...
    99+
    2024-04-02
  • Java新手教程之ArrayList的基本使用
    目录1.简介 2. 方法解释 (1)contains(Object o) (2)lastIndexOf(Object o) (3) toArray() (4)toArray(T[] ...
    99+
    2024-04-02
  • Java之Jackson的基本使用案例讲解
    Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看...
    99+
    2024-04-02
  • Java异常处理try catch的基本使用
    目录1. 异常1.1 try…catch异常处理1.2 多catch并行处理1.3 throw和throws 关键字的使用1.4 finally代码块1.5 Runti...
    99+
    2024-04-02
  • Redis实战:Redis在Java中的基本使用
    本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实...
    99+
    2023-08-31
    redis java 数据库
  • Java过滤器Filter的基本使用教程
    过滤器Filter 用于拦截请求、过滤响应在不使用过滤器时,浏览器向服务器发送请求后,服务器将会直接去获取资源并响应给浏览器添加Filter后,浏览器向服务器发送请求,请求在到达服务...
    99+
    2023-02-22
    Java Filter Java Filter过滤器 Java过滤器
  • Postgresql的基本使用
    Windows 下服务检查首页查看服务是否运行查找postgresql服务服务正在运行执行命令 命令行管理打开cmd命令行连接数据库命令接入PostgreSQL数据库: psql -h IP地址 -p 端...
    99+
    2024-04-02
  • MySQL的基本使用
    目录 1、数据库基础 2、MySQL数据库的使用 3、数据库基本操作 4、常用函数 5、MySQL自带库 1、数据库基础 数据(Data):图像、语音、文字等 在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据。 ...
    99+
    2023-10-06
    网络安全 web安全 安全 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作