spring boot项目配置使用minion
一. Minio概述
Minio是一款开源的高性能对象存储服务,兼容Amazon S3 API,适用于私有云、混合云及边缘计算场景。它采用分布式架构设计,支持水平扩展,提供数据加密、版本控制、生命周期管理等企业级功能,适用于存储非结构化数据(如图片、视频、日志等)。
核心特性
- S3兼容:完全兼容Amazon S3 API,现有S3工具可直接对接。
- 高性能:基于Golang编写,优化了并发和吞吐量,适合高负载场景。
- 分布式部署:支持Erasure Code(纠删码)技术,实现数据冗余和恢复。
- 轻量级:单二进制文件部署,资源占用低,适合容器化(如Docker、Kubernetes)。
- 安全性:支持TLS加密、客户端加密、IAM策略及审计日志。
部署模式
- 单机模式:快速部署用于测试或开发,无冗余能力。
- 分布式模式:多节点集群部署,数据自动分片和冗余,保障高可用。
使用场景
- 大数据存储:与Hadoop、Spark等大数据工具集成。
- 备份与归档:结合生命周期策略自动管理数据。
- 云原生应用:为Kubernetes提供持久化存储解决方案。
- CDN源站:存储静态资源并通过API快速分发。
技术优势
- 纠删码技术:数据自动分片并分散存储,即使部分节点故障仍可恢复,冗余度可配置。
- 加密与安全:支持客户端加密(SSE-C)、服务器端加密(SSE-S3)和传输加密(TLS)。
- 监控与日志:集成Prometheus、Grafana等工具,提供实时监控和日志分析能力。
快速安装示例(Linux)
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data
访问http://localhost:9000
并使用默认凭据(用户名minioadmin
,密码minioadmin
)登录管理界面。
与其他存储方案对比
- vs Ceph:Minio更轻量,配置简单,适合中小规模;Ceph功能更全但复杂度高。
- vs NAS:Minio通过对象存储接口提供更高扩展性,NAS适合文件级访问。
Minio适合需要简单、高性能S3兼容存储的场景,开源版本满足多数需求,企业版提供额外支持和服务。
二. 添加依赖
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.10</version></dependency>
三. application.yml配置
minio:endpoint: http://localhost:9000access-key: ${MINIO_ACCESS_KEY:root}secret-key: ${MINIO_SECRET_KEY:123456}bucket-name: fusionconnect-timeout: 3000socket-timeout: 15000
四. 创建MinioConfig文件
/*** MinIO存储服务配置类* <p>* 该类用于配置MinIO客户端连接参数,并在初始化时自动创建存储桶(如果不存在)* 并设置存储桶的公共读访问策略。配置属性通过`minio`前缀绑定到应用配置。* * 示例配置:* minio.endpoint=http://localhost:9000* minio.accessKey=minioadmin* minio.secretKey=minioadmin* minio.bucketName=my-bucket*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@Validated
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {/** MinIO服务地址 */private String endpoint;/** 访问密钥 */private String accessKey;/** 秘密密钥 */private String secretKey;/** 存储桶名称 */private String bucketName;/** 连接超时时间(毫秒),默认3000 */private int connectTimeout = 3000;/** 套接字超时时间(毫秒),默认15000 */private int socketTimeout = 15000;/*** 初始化MinIO存储桶* <p>* 在Bean初始化后执行,主要完成以下操作:* 1. 创建MinIO客户端实例* 2. 检查配置的存储桶是否存在,不存在则创建* 3. 设置存储桶的公共读访问策略* * @throws Exception 当连接MinIO失败或操作异常时抛出*/@PostConstructpublic void initializeBucket(