一文迅速掌握minio、xxl-job、jave的使用

一篇文章迅速掌握自建文件床minio、分布式定时任务框架xxl-job、视频转码截屏框架jave、业务层实现多表查询mybatis-plus-join的使用

minio的使用

引入依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
</dependency>  版本号在项目父pom.xml中,后续依赖同理

配置地址和参数

minio:
  url: http://localhost:9000
  access.name: minioadmin   默认值
  access.secret: minioadmin  默认值

注册核心Bean

@Configuration
public class MinioConfig {
    @Value("${minio.url}")
    private String endpoint;

    @Value("${minio.access.name}")
    private String accessKey;

    @Value("${minio.access.secret}")
    private String secretKey;
    

    @Bean
    public MinioClient minioClient() {
        try {
读取配置文件中的参数值,构造者模式注册Bean
            MinioClient minioClient = MinioClient.builder()
                    .endpoint(endpoint)
                    .credentials(accessKey, secretKey)
                    .build();
            return minioClient;
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

}

使用minio

创建桶

public Boolean createBucket(String name){
    try {
        查询桶是否存在,不存在则创建
        boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
        if (!isExist) {
        构造者模式创建桶
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
        } else {
        }
    } catch (Exception e) {
    }
    return true;
}

删除桶

public Boolean deleteBucket(String name){
    try {
        minioClient.removeBucket(RemoveBucketArgs.builder().bucket(name).build());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return true;
}

上传文件

public Boolean uploadVideoFile(String fileName, InputStream stream, String contentType) {
    try {
String bucketName="video";
构造者模式将文件名、桶名、文件类型、文件流构造成一个对象,然后上传该对象到minio
        minioClient.putObject(
                PutObjectArgs.builder().bucket(bucketName).object(fileName)
                        .stream(stream, -1, 10485760)
                        .contentType(contentType)
                        .build());

        stream.close();
        return true;
    } catch (Exception e) {
        throw new RuntimeException("上传失败", e);
    }
}

删除文件

public Boolean deleteBucket(String bucketName,String fileName){
    try {     minioClient.removeBucket(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return true;
}

获取文件

public InputStream getObject(String objectName) {
    try {
        GetObjectArgs getObjectArgs = GetObjectArgs.builder()
                .bucket(bucketName)
                .object(objectName)
                .build();
        return minioClient.getObject(getObjectArgs);
    } catch (Exception e) {
        log.error("错误:" + e.getMessage());
    }
    return null;
}

关于minio的使用有几点需要注意:

1.minio中同一个桶内不能有重名文件,类似windows系统一个文件夹下不能有重名文件,但windows会给重名文件中第二个上传的文件默认加后缀(1),而minio会直接覆盖前一个文件,因此有需求是上传同名文件时可以加前缀后缀如uuid区分开来

2.minio版本更新极快,因此不同的minio中间件版本和maven依赖版本组合的结果是不能百分百预测的,可能会出现未知bug,因此保险起见,最好不修改教程中的minio中间件版本和maven依赖,可以保证不出bug正常运行

xxl-job的使用

下载xxl-job执行器的管理器和执行器的jar包(https://labilibili.com/package/xxl-job)

修改xxl-job执行器配置

只需修改xxl-job连接数据库的用户名和密码

在本地数据库中创建xxl-job表

CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;
SET NAMES utf8mb4;
注意这段代码,这是适配Linux上的建表语句因为在Linux上才需要先指定用哪个数据库,若使用本机部署则可以把这段代码删掉,只需要在远程连接数据库软件比如dbeaver、navicat中先建数据库,然后在该数据库中新建sql编辑器,再将sql复制上去执行,若一次性执行有问题则需要一个表一个表的创建

启动xxl-job

该项目在idea中打开后上方默认就可以启动执行器管理器,启动后在浏览器地址栏输入http://localhost:8080/xxl-job-admin,自动重定向到登录页面

输入用户名admin和密码123456登录

执行器注册进管理器并执行任务

上方下载的执行器已改好配置,无需修改任何地方,在需要执行任务的方法上使用注解即可

@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
    XxlJobHelper.log("XXL-JOB, Hello World.");

    for (int i = 0; i < 5; i++) {
        XxlJobHelper.log("beat at:" + i);
        TimeUnit.SECONDS.sleep(2);
    }
    // default success
}

启动程序后在管理器中查看是否有注册进去

注册进去后在任务管理的某个任务右侧的操作按钮中选择执行一次

接下来的参数设置出于快速入门的目的不需要输入任何参数直接保存

在执行日志中选择某项任务右侧的操作,可查看日志

jave的使用

引入依赖

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-all-deps</artifactId>
</dependency>

转码和获取视频相关信息

给将被转码的视频文件流提供一个文件路径和名字
            String filePath = Files.createTempDirectory(".tmp").toString();
            String videoFi

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

该专栏存放前后端分离仿b站微服务项目相关教程与简历话术

全部评论
这也能刷到嘛😊
点赞 回复 分享
发布于 2024-07-16 01:50 重庆
佬,xxl-job的下载挂了
点赞 回复 分享
发布于 昨天 15:19 江苏

相关推荐

02-04 01:02
安徽大学 Java
投票
Java抽象带篮子:不需要,八股才是王道。外卖项目可以看看我的魔改苍穹外卖话术,还额外扩展了很多技术亮点呢推荐项目的话我还有个7000字话术是轮子项目[偷笑R]
点赞 评论 收藏
分享
评论
5
18
分享

创作者周榜

更多
牛客网
牛客企业服务