模块独立封装成springboot-stater并引入使用



前言

学习内容:

  • 学会如何将独立模块封装为springboot-starter并引入使用

提示:以下是本篇文章正文内容,下面案例可供参考
例子使用阿里云OSS

一、创建模块

创建要封装成springboot-start的代码和配置

  1. 创建自定义OSS接口
package com.mk.file.service;

import java.io.InputStream;

/**
 * @author mk
 */
public interface FileStorageService {

    public String upload(InputStream inputStream, String module, String fileName);
}
  1. 实现OSS接口
    @EnableConfigurationProperties(OssConfigProperties.class)注解是开启OssConfigProperties.class这个类的配置扫描属性
    @Import(OssConfig.class)这个注解是将OssConfig这个类注入到Spring中
package com.mk.file.service.impl;



import com.aliyun.oss.OSS;

import com.aliyun.oss.model.CannedAccessControlList;
import com.mk.file.config.OssConfig;
import com.mk.file.config.OssConfigProperties;
import com.mk.file.service.FileStorageService;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Import;

import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@Slf4j
@EnableConfigurationProperties(OssConfigProperties.class)
@Import(OssConfig.class)
public class OssFileStorageService implements FileStorageService {

    @Autowired
    private OSS ossClient;

    @Autowired
    private OssConfigProperties ossConfig;
    @Override
    public String upload(InputStream inputStream, String module, String fileName) {
        System.out.println("module是===>"+module);
        System.out.println("fileName是===>"+fileName);
        System.out.println(ossConfig);
        if(!ossClient.doesBucketExist(ossConfig.getBucketname())){
            //创建bucket
            ossClient.createBucket(ossConfig.getBucketname());
            //设置oss实例的访问权限:公共读
            ossClient.setBucketAcl(ossConfig.getBucketname(), CannedAccessControlList.PublicRead);
        }

        //构建日期路径
        String folder = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        //文件名:uuid.扩展名
        fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
        //文件根路径
        String key = module + "/" + folder + "/" + fileName;
        System.out.println("文件路径===>"+key);
        //文件上传至阿里云
        ossClient.putObject(ossConfig.getBucketname(), key, inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();

        //阿里云文件绝对路径
        return "https://" + ossConfig.getBucketname() + "." + ossConfig.getEndpoint() + "/" + key;
    }
}

  1. OssConfigProperties扫描配置文件,启动步骤2会开启步骤3的配置扫描
package com.mk.file.config;


import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.io.Serializable;

@Data
@ConfigurationProperties(prefix = "aliyun.oss")  // 文件上传配置
public class OssConfigProperties implements Serializable {
    private String endpoint;
    private String accesskey;
    private String secretkey;
    private String bucketname;
}

  1. OssConfig配置类
@Data
@Configuration
@ConditionalOnClass(FileStorageService.class)//当有了这个类FileStorageService类后OssConfig才会生效
public class OssConfig {

    @Autowired
    private OssConfigProperties ossConfigProperties;

    //创建阿里云OSS客户端
    @Bean
    public OSS buildOssClient() {
        return new OSSClientBuilder().build(ossConfigProperties.getEndpoint(),ossConfigProperties.getAccesskey(),ossConfigProperties.getSecretkey());
    }
}
  1. 在resources文件下创建META-INF文件夹,并在META-INF文件夹中创建spring.factories文件
    创建这个文件的作用就是当我们其他模块引入当前这个start模块后会自动注入com.mk.file.service.impl.OssFileStorageService就可以直接使用了
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mk.file.service.impl.OssFileStorageService
  1. 在pom文件中声明artifactId,这样其他模块就可以通过这个oss-file-starter导入我们上面自定义的start模块了
<artifactId>oss-file-starter</artifactId>

二、测试

  1. 导入自定义OSS的start模块

代码如下(示例):

 <!--导入自定义的minio  starter-->
    <dependencies>
        <dependency>
            <groupId>com.mk</groupId>
            <artifactId>oss-file-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  1. 在application.yml配置文件中写入 阿里云的配置属性,这里要和步骤3中的配置前缀和属性名保持一致
aliyun:
  oss:
    endpoint: Endpoint(地域节点)的外网节点
    accesskey: 阿里云用户密钥
    secretkey: 阿里云密码密钥
    bucketname: oss的桶名称
  1. 测试
@SpringBootTest(classes = OssApp.class)
@RunWith(SpringRunner.class)
public class MinioStarterTest {

    @Autowired
    FileStorageService fileStorageService;

    @Test
    public void test() throws FileNotFoundException {
        InputStream stream = new FileInputStream("上传文件的路径");
        String uploadUrl = fileStorageService.upload(stream, 模块名, 传输文件名);
    }

}

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值