菜鸟关于SpringBoot配置MinIo的一些疑惑问题的记录

(本文章完全仅适合什么都不懂的小白阅读.......)在项目中运用到了MinIo,因为后台用了springboot,所以就搜索了关于springboot配置MinIo的一些博文(本人对于springboot的原理并不了解,仅局限于依靠百度可以使用的程度),在MinIO的配置上做了如下工作:

首先在application.yml中配置了minIo的连接信息:

#minIO 地址
minio:
  endpoint: http://127.0.0.1
  port: 9000
  accessKey: minioadmin
  secretKey: minioadmin
  secure: false

然后写了配置类(这时我也并不了解这个叫法的意义):

MinioPropertiesConfig.java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * minio配置类
 *
 */
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioPropertiesConfig {

    /**
     * 端点
     */
    private String endpoint;
    
    /**
     * 端口
     */
    private int port;
    /**
     * 用户名
     */
    private String accessKey;
    /**
     * 密码
     */
    private String secretKey;

    /**
     * 桶名称
     */
    private String bucketName;
    
    /**
     * 开启https
     */
    private Boolean secure;

	public String getEndpoint() {
		return endpoint;
	}

	public void setEndpoint(String endpoint) {
		this.endpoint = endpoint;
	}

	public String getAccessKey() {
		return accessKey;
	}

	public void setAccessKey(String accessKey) {
		this.accessKey = accessKey;
	}

	public String getSecretKey() {
		return secretKey;
	}

	public void setSecretKey(String secretKey) {
		this.secretKey = secretKey;
	}

	public String getBucketName() {
		return bucketName;
	}

	public void setBucketName(String bucketName) {
		this.bucketName = bucketName;
	}

	public Boolean getSecure() {
		return secure;
	}

	public void setSecure(Boolean secure) {
		this.secure = secure;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}
    
}

MinioConfig.java

@Configuration
@EnableConfigurationProperties(MinioPropertiesConfig.class)
public class MinioConfig{
	@Resource
    private MinioPropertiesConfig minioPropertiesConfig;
    
    @Bean
    public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {
        MinioClient minioClient = MinioClient.builder().endpoint(minioPropertiesConfig.getEndpoint(), minioPropertiesConfig.getPort(), minioPropertiesConfig.getSecure())
                        .credentials(minioPropertiesConfig.getAccessKey(), minioPropertiesConfig.getSecretKey())
                        .build();
        return minioClient;
    }
    
}

最后直接在我的工具类中就可以直接调用:

MinioClientUtils.java

@Component
public class MinioClientUtils {

    @Autowired
    private MinioClient minioClient;

    /**
     * 判断bucket是否存在,不存在则创建
     *
     * @return: void
     */
    public void existBucket(String name) {
        try {
            boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
            if (!exists) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
                //默认设置桶策越为public
                String policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\","
                        + "\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucketMultipartUploads\","
                        + "\"s3:GetBucketLocation\",\"s3:ListBucket\"],\"Resource\":[\"arn:aws:s3:::"
                        + name + "\"]},"
                        + "{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},"
                        + "\"Action\":[\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\","
                        + "\"s3:ListMultipartUploadParts\",\"s3:PutObject\"],"
                        + "\"Resource\":[\"arn:aws:s3:::" + name + "/*\"]}]}";
                minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().config(policy).bucket(name).build());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

按上述的方法配置后,使用上是没问题,但对于菜鸟的我来说这时候问题就来了,minioClient是怎么被自动配置上的呢,经过一顿查找和试验懵懂的了解了点点懵懂的东西,情况是这样滴,请听我娓娓道来.......

我在MinioConfig.java这个文件中使用了@Configuration和@Bean这两个标注,springboot会在启动的时候把@Bean托管(自动执行 暂且这么理解),然后再MinioClientUtils.java中我使用了@Autowired标注,它会自动去找寻一遍被@Bean标注的对象(返回类型一致的,我这里是bean里面返回了MinioClient的类型),查找到返回类型一致的对象即把它给抢过来复制类似于MinioClient minioClient = getMinioClient();这么个过程,因此minioClient就被自动注入了。画重点,@Autowired会去查找被@Bean标注的返回类型一致的对象来进行注入。你可以自行测试,写一个@Autowired,然后再写一个@Configuration类,里面写一个@Bean。如果没有@Autowired找不到配对的@Bean启动时就会出现

Field minioClient in xxx required a bean of type 'xxx' that could not be found.

 的错误。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值