目录

一、封装

目录结构

1. 创建一个空项目

2. 导入依赖

3. 编写 Java 类及配置文件

3.1 编写 OssProperties 类

3.2 编写 OssTemplate 类

3.3 编写 AliyunOssAutoConfig 类

3.4 创建 spring.factories 文件

4. install

二、测试

目录结构

1. 创建一个新的空项目

2. 导入依赖 

3. 创建 yml 文件

4. 编写启动类

5. 编写 TestController 类

6. 运行启动类进行测试


这里以阿里云的 OSS 对象存储为例进行制作,首先开通 OSS 存储服务

一、封装

目录结构

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring

1. 创建一个空项目

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring_02

2. 导入依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
    </parent>

    <dependencies>
        <!--web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>


        <!--阿里云oss依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
    </dependencies>

  注意:阿里云 OSS 依赖从这里获取

Java安装 (aliyun.com)

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_java_03

3. 编写 Java 类及配置文件

3.1 编写 OssProperties 类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
    private String url;
}

  注意: 此时 @ConfigurationProperties 注解爆红先不管

3.2 编写 OssTemplate 类

import com.aliyunoss.properties.OssProperties;
import java.io.InputStream;

public class OssTemplate {
    private OssProperties ossProperties;

    public OssTemplate(OssProperties ossProperties) {
        this.ossProperties = ossProperties;
    }

    public String uploadFile(String fileName, InputStream inputStream) {

    }
}

  将文档中上传文件流中的代码拷贝到 uploadFile 方法中,并且修改

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring boot_04

 修改完成后的 OssTemplate 类

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyunoss.properties.OssProperties;
import java.io.InputStream;

public class OssTemplate {
    private OssProperties ossProperties;

    public OssTemplate(OssProperties ossProperties) {
        this.ossProperties = ossProperties;
    }

    public String uploadFile(String fileName, InputStream inputStream) {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = ossProperties.getEndpoint();
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ossProperties.getAccessKeyId();
        String accessKeySecret = ossProperties.getAccessKeySecret();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = ossProperties.getBucketName();
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        String objectName = System.currentTimeMillis() + suffixName;
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 设置该属性可以返回response。如果不设置,则返回的response为空。
            putObjectRequest.setProcess("true");
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 如果上传成功,则返回200。
            System.out.println(result.getResponse().getStatusCode());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return ossProperties.getUrl() + objectName;
    }
}

3.3 编写 AliyunOssAutoConfig 类

import com.aliyunoss.properties.OssProperties;
import com.aliyunoss.template.OssTemplate;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
 * EnableConfigurationProperties:项目启动的时候,自动加载SmsProperties,创建实例
 */
@EnableConfigurationProperties({OssProperties.class})
public class AliyunOssAutoConfig {

    /**
     * 将当前的SmsTempate交给Spring容器管理
     */

    @Bean
    public OssTemplate ossTemplate(OssProperties ossProperties) {
        return new OssTemplate(ossProperties);
    }
}

3.4 创建 spring.factories 文件

文件内容为

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.aliyunoss.AliyunOssAutoConfig

文件位置为: resources\META-INF\spring.factories

4. install

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_System_05

二、测试

目录结构

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring_06

1. 创建一个新的空项目

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring_07

2. 导入依赖 

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
    </parent>

    <dependencies>
        <!--web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--刚刚我们制作好的oss启动器的依赖-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>aliyun-oss-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

3. 创建 yml 文件

aliyun:
  oss:
    endpoint: # 在这里设置你的 endpoint
    accessKeyId: # 在这里设置你的 accessKeyId
    accessKeySecret: # 在这里设置你的 accessKeySecret
    bucketName: # 在这里设置你的 bucketName
    url: # 在这里设置你的 url

4. 编写启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

5. 编写 TestController 类

import com.aliyunoss.template.OssTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

@RestController
@RequestMapping("/test")
public class TestController {
    @Resource
    private OssTemplate ossTemplate;

    @GetMapping("/testUpload1")
    public String testUpload1() throws IOException {
        String filePath = "C:\\Users\\A\\Desktop\\bt.jpg";
        File file = new File(filePath);
        return ossTemplate.uploadFile(file.getName(), Files.newInputStream(file.toPath()));
    }

    @PostMapping("/testUpload2")
    public String testUpload2(MultipartFile file) throws IOException {
        return ossTemplate.uploadFile(file.getName(), file.getInputStream());
    }
}

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring_08

6. 运行启动类进行测试

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_System_09

到 OSS 管理控制台查看

springboot程序如何定义一个启动就默认运行的方法 springboot自定义启动类_spring boot_10