谷粒商城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 整合问题

相关推荐
君顾11 小时前
代驾跑腿业务系统实战开发指南
java·开发语言·代驾跑腿
NGINX开源社区2 小时前
NGINX Ingress Controller 5.5:安全性与性能提升,迁移更轻松
java·服务器·nginx
云烟成雨TD2 小时前
Micrometer 系列【25】Spring Boot Actuator | Spring MVC、Spring WebFlux 指标
java·spring boot·micrometer
liudashuang20172 小时前
Kafka Producer 隐藏深坑:Sender 线程自阻塞(自死锁)导致 BufferExhaustedException 完整复盘
java·分布式·kafka·linq
风筱2 小时前
Idea的CC GUI插件安装Claude Code SDK失败
java·ide·ai编程
m0_527034332 小时前
异步任务审核系统设计:消息队列、超时重试与失败补偿
java·大数据·开发语言
xbgRS3 小时前
springBoot项目配置加载优先级
java·spring boot
zzzll11113 小时前
Loop Engineering:循环工程的原理、实践与应用
java·数据库·python
假客套3 小时前
记一次若依 Excel 导出踩坑:Permission denied、401 报错完整排查记录
java·若依·linux服务器
岁岁养乐多3 小时前
深入解析 Spring @Cacheable 注解:从声明式缓存 到多维替代方案
java