谷粒商城P62 Spring Cloud Alibaba整合 OSS 报错问题(成功解决)

文章目录

一、依赖版本

二、整合步骤

  • 2.1 视频 / 旧版本
  • 2.2 官网 / 新版本

三、product测试

四、额外补充

  • 4.1 renren-fast报错

  • 4.2 解决方案

    • 4.2.1 视频 / 旧版本
    • 4.2.2 官网 / 新版本

最近在学习谷粒商城,一直卡在P62,SpringCloud Alibaba整合OSS报错,零零散散花了几天晚上 终于解决,特此记录下。

一、依赖版本

项目使用的版本为:

  • SpringBoot版本:2.6.13
  • SpringCloud版本:2021.0.5
  • SpringCloud-Alibaba版本:2021.0.5.0

SpringBoot、SpringCloud、SpringCloud-Alibaba具体对应版本 可见官网, SpringBoot、SpringCloud、SpringCloudAlibaba版本对应关系

二、整合步骤

视频中所添加的依赖与官网有所不同,主要区别在于:

1)引入的依赖不同

xml 复制代码
<!--视频/旧版本-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>
 
<!--官网/新版本-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>

2)application.yml文件配置不同

yml 复制代码
#视频/旧版本
spring:
  cloud:
	alicloud:
	  access-key: yourkey
	  secret-key: yourkey
	  oss:
	    endpoint: ....
 
#官网/新版本
alibaba:
  cloud:
    access-key: yourkey
    secret-key: yourkey
    oss:
      endpoint: ....

下面分两种方式来介绍。

2.1 视频 / 旧版本

1)和视频引入的包相同,在common模块的pom.xml引入下面依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

注意要带上<version>,否则报错:

java.lang.NoClassDefFoundError: com/baomidou/mybatisplus/extension/service/IService

2)在gulimall-product模块的application.yml文件进行如下配置

yml 复制代码
spring:
  cloud:
	alicloud:
	  access-key: L****p
	  secret-key: L****d
	  oss:
	    endpoint: oss-cn-beijing.aliyuncs.com
    util:
      enabled: false

重点注意:需要配置spring.cloud.util:enabled为false,否则报错

java.lang.IllegalStateException: Failed to load ApplicationContext

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nacosProperties': Unsatisfied dependency expressed through field 'inetIPv6Utils'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'inetIPv6Utils' defined in class path resource [com/alibaba/cloud/nacos/util/UtilIPv6AutoConfiguration.class]: Unsatisfied dependency expressed through method 'inetIPv6Utils' parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.commons.util.InetUtilsProperties' available: expected single matching bean but found 2: spring.cloud.inetutils-org.springframework.cloud.commons.util.InetUtilsProperties,inetUtilsProperties

2.2 官网 / 新版本

1)用aliyun-spring-boot官网示例的依赖,在common模块的pom.xml引入下面依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>aliyun-oss-spring-boot-starter</artifactId>
    <!-- 版本号不能少,否则报错 -->
    <version>1.0.0</version>
</dependency>
<!-- 必须导入新的依赖,否则会报错 -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.7</version>
</dependency>

注意:

A.aliyun-oss-spring-boot-starter带上版本号,否则报错

Caused by: java.lang.ClassNotFoundException: com.baomidou.mybatisplus.extension.service.IService

B.必须多引入 aliyun-java-sdk-oss,否则报错

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aliCloudEdasSdk' defined in class path resource

C.必须多引入 aliyun-sdk-oss,否则报错

程序包com.aliyun.oss不存在

2)在gulimall-product模块的application.yml文件进行如下配置(注意:和视频的配置不同,注意区分

yml 复制代码
# 阿里云OSS配置暂时先放在此处(后续会放在Nacos配置中心)
alibaba:
  cloud:
    access-key: L****p
    secret-key: L****d
    oss:
      endpoint: oss-cn-beijing.aliyuncs.com

注意:如果还是报错Error creating bean with name 'ossClient',记得注释掉product模块 pom.xml文件中添加的aliyun-sdk-oss依赖,因为product模块自带的oss配置与common模块引入的oss依赖版本冲突。

三、product测试

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest
class JewelrymallProductApplicationTests {

    //用Autowired虽然会标红,但是可以运行起来。也可用@Resource
    @Autowired
    private OSSClient ossClient;

    @Test
    public void testUpload() throws Exception {
        String filePath= "C:\\Users\\28687\\Desktop\\test0.png";
        try {
            InputStream inputStream = new FileInputStream(filePath);
            ossClient.putObject("jewelrymall-wj", "test-0.png", inputStream);
            System.out.println("上传完成...");
        }
        finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

如果还是报错Error creating bean with name 'ossClient',记得注释掉product模块 pom.xml文件中添加的aliyun-sdk-oss依赖,因为product模块自带的oss配置与common模块引入的oss依赖版本冲突。

四、额外补充

4.1 renren-fast报错

按照以上方式,product服务的 testUpload()方法能正常运行,但renren-fast的RenrenApplication会报错

因为版本冲突。renren-fast的pom.xml文件中本就自带有aliyun-sdk-oss依赖(版本为2.8.3),而common pom.xml文件中的spring-cloud-starter-alicloud-oss / aliyun-oss-spring-boot-starter 也包含aliyun-sdk-oss依赖(版本为3.1.0),有冲突。

如果注释掉renren-fast pom.xml文件中的aliyun-sdk-oss,使用common pom.xml文件中的spring-cloud-starter-alicloud-oss / aliyun-oss-spring-boot-starter ,会报错。

大概是renren-fast的SpringBoot版本为2.6.6,与3.1.0版本的aliyun-sdk-oss不兼容导致的(上述2.1、2.2引入 的aliyun-sdk-oss版本为3.1.0),因此renren-fast 还是得与原来2.8.3版本的aliyun-sdk-oss配合使用。

此时需要引入dependencyManagement将冲突的jar包管理起来,其他product等模块继承common模块oss的版本,renren-fast使用自己携带的版本。

4.2 解决方案

和上文第二部分类似,我们分别介绍两种整合方式对应的解决方案。

4.2.1 视频 / 旧版本

1)和视频引入的包相同,在common模块的pom.xml引入下面依赖

xml 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

renren-fast pom.xml中aliyun-sdk-oss保留

xml 复制代码
<properties>
    <aliyun.oss.version>2.8.3</aliyun.oss.version>
</properties>

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>${aliyun.oss.version}</version>
</dependency>

guilmall-product模块的pom.xml文件引入spring-cloud-starter-alicloud-oss

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

2)在gulimall-product模块的application.yml文件进行如下配置

yml 复制代码
spring:
  cloud:
	alicloud:
	  access-key: L****p
	  secret-key: L****d
	  oss:
	    endpoint: oss-cn-beijing.aliyuncs.com
    util:
      enabled: false

使用mvn clean install -U,使用所有依赖的最新版本【清除旧的构建产物;构建项目并将打包的项目安装到本地参考,供其他项目作为依赖;检查并更新所有依赖的最新版本(包括 SNAPSHOT 版本)】。

重新运行,发现 renren-fast的RenrenApplication、product服务的 testUpload()方法都能正常运行

4.2.2 官网 / 新版本

1)用aliyun-spring-boot官网示例的依赖,在common模块的pom.xml引入下面依赖

xml 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>aliyun-oss-spring-boot-starter</artifactId>
            <!-- 版本号不能少,否则报错 -->
            <version>1.0.0</version>
        </dependency>
        <!-- 必须导入新的依赖,否则会报错 -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.7</version>
        </dependency>
    </dependencies>
</dependencyManagement>

renren-fast pom.xml中aliyun-sdk-oss保留

xml 复制代码
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>${aliyun.oss.version}</version>
</dependency>

guilmall-product模块的pom.xml文件引入

xml 复制代码
<dependencies>
    <!-- 其他依赖 -->
    
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>aliyun-oss-spring-boot-starter</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.7</version>
    </dependency>
</dependencies>

2)在gulimall-product模块的application.yml文件进行如下配置(注意:和视频的配置不同,注意区分

yml 复制代码
# 阿里云OSS配置暂时先放在此处(后续会放在Nacos配置中心)
alibaba:
  cloud:
    access-key: L****p
    secret-key: L****d
    oss:
      endpoint: oss-cn-beijing.aliyuncs.com

参考 谷粒商城 P62 OSS 整合问题

相关推荐
张张张31210 分钟前
4.2学习总结 Java:list系列集合
java·学习
KATA~13 分钟前
解决MyBatis-Plus枚举映射错误:No enum constant问题
java·数据库·mybatis
xyliiiiiL28 分钟前
一文总结常见项目排查
java·服务器·数据库
shaoing30 分钟前
MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
java·开发语言·数据库
腥臭腐朽的日子熠熠生辉1 小时前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
ejinxian1 小时前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之1 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码2 小时前
Spring Task 定时任务
java·前端·spring
俏布斯2 小时前
算法日常记录
java·算法·leetcode
27669582922 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿