当前位置: 首页 > news >正文

解决RuoYi-Cloud项目ruoyi-system模块启动失败问题以及Naco容器部署问题

解决RuoYi-Cloud项目ruoyi-system模块启动失败问题

在使用RuoYi-Cloud微服务框架时,很多新手可能会遇到项目启动失败的问题。本文将详细分析一个常见的启动失败案例,并提供完整的解决方案,帮助大家快速上手RuoYi-Cloud框架。

Naco容器部署问题

RuoYi-Cloud项目ruoyi-system模块启动失败问题主要就是Nacos的部署问题,该文章看完后Nacos容器化部署自然就理解了。

问题描述

克隆RuoYi-Cloud项目后,按照下面图示的项目文档一步步执行,当你执行到第5步的时候可能会感觉到疑惑不解(如果你是第一次搞微服务和Nacos的话),所以你选择跳过了。
在这里插入图片描述
然后你去进行下面图示的项目启动时,前面的项目还好尤其到了这个RuoYiSystemApplication (系统模块 必须)时候。
在这里插入图片描述
项目输出日志会出现大量的配置问题如下:可能有Nacos没配置、Redis没配置、Mapper文件配置问题,总结都是配置问题,如果你去修改代码或添加配置文件,哈哈你将非常的痛苦,因为根本解决不了。

17:56:08.913 [main] ERROR o.s.b.SpringApplication - [reportFailure,818] - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysConfigController': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:693)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:408)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409)at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)at com.ruoyi.system.RuoYiSystemApplication.main(RuoYiSystemApplication.java:20)

问题分析(所以根本问题如下分析)

RuoYi-Cloud作为一个成熟的微服务框架,采用了分布式配置中心(Nacos)来管理各个服务的配置信息,而不是将所有配置硬编码在项目的配置文件中。这也是很多微服务框架的常见做法。(下面举例说明了一下,你可以理解一下这个Nacos是啥。)

  1. Redis连接失败的本质原因

    • 项目默认配置中Redis的连接信息(地址、端口等)存储在Nacos配置中心
    • 如果Nacos配置中心未正确配置或未启动,项目将使用默认值(localhost:6379)连接Redis
    • 当本地未启动Redis服务时,就会出现上述连接失败的错误
  2. Nacos配置中心的重要性

    • RuoYi-Cloud将大部分配置信息(包括数据库、Redis、服务端口等)存储在Nacos中
    • 项目启动时会从Nacos获取配置信息
    • 开发者通常会将配置信息初始化到名为ry-config的数据库中

懂了没有,不懂你就打开数据库ry-config中的表(以config_info为例)

这里面包含很多的配置如:spring、redis、mybatis的等等。
在这里插入图片描述

解决方案(所以如何做呢?)

要解决这个问题,需要完成Nacos配置中心的搭建配置,具体步骤如下:
因为我自己是在电脑上按照了docker,所有该解决方案针对docker中去部署Nacos和Mysql。
Nacos是注册和配置中心,Mysql用来存放,因此要通过配置这两个才行。

配置Nacos服务

1、整体架构说明

通过Docker部署Nacos 3.0.1单机版,并连接Docker中的MySQL 8.0数据库,实现配置持久化。全程包含完整的命令注释、网络配置说明及问题排查,适合新手快速上手。

2、具体操作

2.1 Docker中的镜像准备

通过docker命令docker images查看docker中的镜像版本,如下图所示:
在这里插入图片描述

2.2 Docker网络规划

为了让Nacos与MySQL在Docker内部高效通信,建议创建自定义桥接网络(避免使用默认bridge网络的端口映射复杂性):

# docker network create 创建网络命令(docker中的)
# --driver bridge:指定要创建的网络类型
# bridge 是 Docker 默认的网络驱动
# Nacos-Mysql-Network:这是你为网络指定的名称
docker network create --driver bridge Nacos-Mysql-Network
# 查看网络是否创建成功,如下图所示。
docker network ls

在这里插入图片描述

2.3 创建Mysql容器并加入网络

# docker run -d:以守护进程模式(后台)启动容器
# --name mysql:给容器指定一个名称(便于后续操作和网络访问)
# --network Nacos-Mysql-Network:将容器加入到之前创建的网络中
# -e MYSQL_ROOT_PASSWORD=root:设置 MySQL root 用户密码
# -e MYSQL_DATABASE=ry_config:自动创建一个名为 ry_config 的数据库(Nacos 需要用到)
# -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口(可选,便于外部工具连接)
# mysql:8.0:使用的 MySQL 镜像版本
docker run -d `--name mysql `--network Nacos-Mysql-Network `-e MYSQL_ROOT_PASSWORD=root `-e MYSQL_DATABASE=ry_config `-p 3306:3306 `mysql:8.0
# 查看mysql是否加入网络了
docker network inspect Nacos-Mysql-Network

在这里插入图片描述

2.4 Nacos容器部署

这个用于你理解:

docker run -d `  # 以守护进程模式(后台)启动容器--name nacos `  # 给容器指定名称为 "nacos",便于后续操作--add-host host.docker.internal:host-gateway `  # 添加主机映射,让容器能访问宿主机(解决跨平台网络问题)Windows的dockere使用这个,因为不能访问本地的localhost。-p 8848:8848 `  # 映射 Nacos 主服务端口(Web 控制台和 API 端口)-p 9848:9848 `  # 映射 Nacos 客户端 gRPC 通信端口(用于服务发现/配置推送)-p 8080:8080 `  # 额外映射 8080 端口(可选,根据实际需求使用)--privileged=true `  # 授予容器特权模式,允许容器内访问更多系统资源-e JVM_XMS=256m `  # 设置 JVM 初始堆内存为 256MB(优化内存占用)-e JVM_XMX=256m `  # 设置 JVM 最大堆内存为 256MB(避免内存溢出)-e MODE=standalone `  # 指定 Nacos 运行模式为单机模式(非集群)-e MYSQL_SERVICE_HOST=host.docker.internal `  # MySQL 主机地址(通过 host.docker.internal 访问宿主机的 MySQL)-e MYSQL_SERVICE_PORT=3306 `  # MySQL 端口号(默认 3306)-e MYSQL_SERVICE_DB_NAME=ry-config `  # Nacos 要连接的 MySQL 数据库名(这里是 ry-config)-e MYSQL_SERVICE_USER=root `  # MySQL 登录用户名-e MYSQL_SERVICE_PASSWORD=password `  # MySQL 登录密码(注意:需与实际 MySQL 密码一致)-e SPRING_DATASOURCE_PLATFORM=mysql `  # 指定数据源平台为 MySQL(Nacos 会使用 MySQL 存储数据)-e NACOS_AUTH_TOKEN="这个要替换成你自己的认证令牌我的另一篇文章有写" `  # Nacos 认证令牌(v3.x 强制要求,Base64 字符串)-e NACOS_AUTH_IDENTITY_KEY=nacos-identity `  # 身份认证密钥(固定值,用于安全校验,自己设置的,随便写)-e NACOS_AUTH_IDENTITY_VALUE=security `  # 身份认证值(固定值,用于安全校验,自己设置的,随便写)-v "D:/WSL/nacos/conf:/home/nacos/conf" `  # 挂载本地配置目录到容器内(持久化配置文件,可以运行一个临时容器,拷贝出来)-v "D:/WSL/nacos/logs:/home/nacos/logs" `  # 挂载本地日志目录到容器内(持久化日志文件,可以运行一个临时容器,拷贝出来)nacos/nacos-server:v3.0.1  # 指定使用的 Nacos 镜像及版本(v3.0.1)

这个命令用于你去使用,复制起来会方便一点没有注释

docker run -d --name nacos `
>> --add-host host.docker.internal:host-gateway `
>> -p 8848:8848 `
>> -p 9848:9848 `
>> -p 8080:8080 `
>> --privileged=true `
>> -e JVM_XMS=256m `
>> -e JVM_XMX=256m `
>> -e MODE=standalone `
>> -e MYSQL_SERVICE_HOST=host.docker.internal `
>> -e MYSQL_SERVICE_PORT=3306 `
>> -e MYSQL_SERVICE_DB_NAME=ry-config `
>> -e MYSQL_SERVICE_USER=root `
>> -e MYSQL_SERVICE_PASSWORD=password `
>> -e SPRING_DATASOURCE_PLATFORM=mysql `
>> -e NACOS_AUTH_TOKEN="需要获取,通过命令,看另一篇文章" `
>> -e NACOS_AUTH_IDENTITY_KEY=nacos-identity `
>> -e NACOS_AUTH_IDENTITY_VALUE=security `
>> -v "D:/WSL/nacos/conf:/home/nacos/conf" `
>> -v "D:/WSL/nacos/logs:/home/nacos/logs" `
>> nacos/nacos-server:v3.0.1

2.5 访问Nacos控制台

启动成功后,通过以下地址访问控制台:

http://localhost:8080

默认账号密码:nacos/nacos(生产环境需及时修改)
在这里插入图片描述

2.5 启动项目(成功)

在这里插入图片描述

总结

总之记住一点,配置好Nacos,并且将Mysql数据库中的ry-config中的配置数据加载进去就成功了。(我的文章写的比较粗糙,并且每个人的环境不一样,利用AI完成Nacos配置就好。)

http://www.dtcms.com/a/324628.html

相关文章:

  • 【21】OpenCV C++实战篇——OpenCV C++案例实战二十七《角度测量》
  • SpringAI智能航空助手实战<Demo>
  • 《算法导论》第 17 章 - 摊还分析
  • XGBoost 与 GBDT 的比较:改进与性能提升
  • MATLAB绘制水的蒸汽压曲线(Antoine方程)
  • GitHub上为什么采用Gradle编译要多于Maven
  • DBSACN算法的一些应用
  • 【算法】图的 深度优先搜索(DFS)与 广度优先搜索(BFS)
  • Stream流应用
  • 学习分库分表的前置知识:高可用系统架构理论与实践
  • Java进阶之单列集合Set接口下的通用方法
  • Design Compiler:布图规划探索(ICC II)
  • LwIP的内存管理(1)
  • 密码学RSA取flag
  • 动态工作流:目标结构源自表
  • GeoJSON 介绍
  • 大模型时代的机器人研究趋势:从多模态融合到高效迁移
  • 【C++/STL】list模拟实现和迭代器失效问题
  • Spring Boot配置文件加密详解
  • 6.AD环境中的安全威胁与防护措施全性
  • java报错“ NoSuchMethodError:com.test.Service.doRoomList(Ljava/lang/String;)V解决方案
  • 红黑树及其简单实现
  • XGBoost参数说明和详解
  • Suno API V5 全面升级——多语言接入,开启 AI 音乐创作新时代
  • 计算机网络:路由聚合的注意事项有哪些?
  • vue3前端项目cursor rule
  • ARM保留的标准中断处理程序入口和外设中断处理程序入口介绍
  • 【Jenkins入门以及安装】
  • SQL176 每个题目和每份试卷被作答的人数和次数
  • 力扣(H指数)