java// 创建版本化桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket("versioned-bucket").build());
minioClient.setBucketVersioning(
SetBucketVersioningArgs.builder()
.bucket("versioned-bucket")
.config(new VersioningConfiguration(VersioningConfiguration.Status.ENABLED, null))
.build());
javaminioClient.putObject(
PutObjectArgs.builder()
.bucket("versioned-bucket")
.object("documents/report.pdf")
.stream(inputStream, -1, 10485760) // 10MB part size
.build());
javaIterable<Result<VersionItem>> versionList = minioClient.listObjectVersions(
ListObjectVersionsArgs.builder()
.bucket("versioned-bucket")
.prefix("documents/")
.build());
for (Result<VersionItem> result : versionList) {
VersionItem item = result.get();
System.out.println("Object: " + item.objectName() +
" | Version: " + item.versionId() +
" | IsLatest: " + item.isLatest());
}
javatry (InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket("versioned-bucket")
.object("documents/report.pdf")
.versionId("version-id-here")
.build())) {
// 处理对象内容
}
java// 1. 列出删除标记版本
// 2. 删除删除标记版本即可恢复对象
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket("versioned-bucket")
.object("documents/report.pdf")
.versionId("delete-marker-version-id")
.build());
java// 配置自动清理旧版本(需结合生命周期策略)
String lifecycleConfig = """
{
"Rules": [
{
"ID": "ExpireOldVersions",
"Status": "Enabled",
"Filter": {},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 30
}
}
]
}""";
minioClient.setBucketLifecycle(
SetBucketLifecycleArgs.builder()
.bucket("versioned-bucket")
.config(lifecycleConfig)
.build());
javatry {
// 版本操作代码
} catch (ErrorResponseException e) {
if (e.errorResponse().code().equals("NoSuchVersion")) {
// 处理版本不存在的场景
}
} catch (MinioException e) {
// 其他Minio异常处理
}
java// 1. 获取当前版本ID
VersionItem current = getCurrentVersion();
// 2. 修改前检查版本是否仍为最新
if (isLatestVersion(current.versionId())) {
// 执行修改
}
java// 获取两个版本进行比对
InputStream v1 = getVersion("v1-id");
InputStream v2 = getVersion("v2-id");
// 使用差异算法比较内容
java// 将数据版本与业务元数据关联
Map<String, String> metadata = new HashMap<>();
metadata.put("modified-by", userId);
metadata.put("change-reason", "annual update");
minioClient.putObject(
PutObjectArgs.builder()
.bucket("data-lake")
.object("dataset/2023")
.userMetadata(metadata) // 存储业务相关元数据
.stream(dataStream, -1, 10485760)
.build());
通过合理利用Minio版本控制,可以在Java应用中构建更健壮的数据存储层,同时满足数据保护和合规性要求。
本文作者:wucc
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!