spring-boot - 是否可以在一个事务中使用 MinIO 客户端保存一组文件?

标签 spring-boot kotlin transactions inputstream minio

我有一个 Spring Boot 应用程序,它将文件存储在 MinIO 服务器上。我的应用程序接收文件组并且应该保存每个组的所有文件或在问题组中不保存任何文件。我对组中的每个文件使用 io.minio.MinioClient#putObject。现在我的代码看起来像

fun saveFile(folderName: String, fileName: String, file: ByteArray) {
    file.inputStream().use {
        minioClient.putObject(folderName, fileName, it, PutObjectOptions(file.size.toLong(), -1))
    }
}

fun saveFiles(folderName: String, files: Map<String, ByteArray>) {
    try {
        files.forEach { (fileName, file) -> saveFile(folderName, fileName, file) }
    } catch (e: Exception) {
        files.forEach { (fileName, _) -> minioClient.removeObject(folderName, fileName) }
        throw e
    }
}

我想知道如何重构我的 saveFiles 方法以使其更具事务性。

注意没有关于按组读取文件的规则 - 每个文件都可以单独读取。

最佳答案

您可以尝试使用此 S3 feature , MinIO也支持此功能。

创建 .tar 或 .zip 存档并使用元数据选项 snowball-auto-extract=true 发送到 S3( header :X-Amz-Meta-Snowball-Auto-Extract), 存档将自动提取到 S3 中。

这不是交易,但对我来说看起来非常相似。

关于spring-boot - 是否可以在一个事务中使用 MinIO 客户端保存一组文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67505116/

相关文章:

java - 无法在 java Spring Boot 中创建新实体。获取 `` ` 无法启动嵌入式容器 ``` 错误

kotlin - 协程将一项工作添加为另一个工作的子项的正确方法是什么?

android - 谷歌地方 API : Runtime exception not caught

testing - 我应该如何在 Spek 中设置可变测试装置?

java - 如何在组织中实现角色/职称的层次结构并在 JAVA 中在它们之间进行交易

C#/SQL 数据库监听器

Django 1.6 和嵌套 "with transaction.atomic()"

java - Spring Boot Hibernate 5 忽略@Table 和@Column

java - 在Springboot应用程序中使用monad来捕获异常

jar - 为什么我无法提取 Spring Boot 可执行 jar?