记录一下使用ruoyi-cloud过程中遇到的问题

开发工具 Intellij Idea Community、Visual Studio Code

Idea 建议安装插件:Free Mybatis plugin,这样可以从 mapper 接口直接跳转到对应的 mapper.xml 文件

vscode 建议安装插件:Vetur、vscode-element-helper、ESLint

更新时间: 2020-08-08 12:10

目录

1.启动

2.代码生成

3.协同开发一个模块

4.新建模块

新增以com.ruoyi开头的模块

新增不以 com.ruoyi 开头的模块

5.将模块抽取为单独的项目

6.服务接口的定义和服务间调用

7.部署运行

jar 包运行

Redis 只能 localhost 访问,本机 IP 访问报错

docker 运行 nacos

docker 运行 ruoyi 模块

开发环境 docker 部署注意事项


1.启动

按照官网的步骤,

  1. 导入项目,创建数据库和表,启动nacos。接下来修改nacos=》配置管理=》配置列表,把里面用到数据库连接的地方全部换成自己的数据库,并修改用户名和密码,包括:ruoyi-system-dev.yml、ruoyi-auth-dev.yml、ruoyi-gen-dev.yml、ruoyi-job-dev.yml
  2. 下载、安装、启动Redis(注意,2020-07-22的时候官网文档没写这一步,但是必须要启动redis),将nacos配置列表所有用到Redis的地方换成自己的链接,包括:ruoyi-gateway-dev.yml、ruoyi-auth-dev.yml、ruoyi-system-dev.yml
  3. 启动前端。我遇到了某个包下载不下来的情况(ejs),解决办法是单独安装一下那个包,或者复制一个放到 node_modules 下也行。node 版本最好不要太低,我用的12.16.3

补充:vscode 打开 ruoyi-ui后,左侧目录会出现 NPM脚本,点击 dev 右侧的小三角就能启动前端了,简单省事。如下图:

2.代码生成

使用代码生成的时候,数据库表一定要配置主键,不然可能会遇到一些一眼看过去很奇妙的问题,我遇到的是新增和修改调用的是同一个接口,表现出来就是有一个功能异常。后期熟悉了很容易找见问题,但刚接触的时候确实摸不着头脑。

3.协同开发一个模块

多个人协同开发同一个模块的情况多少会遇到。如果不做修改的话,在 nacos 上看到的是一个服务有多个实例,nacos 会根据配置的权重自动做均衡。这种情况下调试就会变得很麻烦。我没采用的解决办法是:假设开发ruoyi-house 模块

  1. 修改 resources 目录下的 bootstrap.yml文件中定义的应用名称,比如改成:ruoyi-house-m1
  2. nacos 上克隆一份原配置,修改名称,这里的情况就是改成 ruoyi-house-m1-dev.yml
  3. 修改 ruoyi-ui 下的 vue.config.js 的 proxy,将要开发模块的请求全部映射到本地,不走网关。这样别人访问不到自己的服务,不用担心调试的时候误入。但是自己可以访问其他模块,不影响自己的开发。参考配置如下:
proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API + '/house']: {target: `http://localhost:9204`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API + '/house']: ''}},[process.env.VUE_APP_BASE_API]: {target: `http://localhost:8080`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}
}

因为是从上到下顺序匹配的,所以顺序一定不能变。同样的也可以实现同一模块的某个接口继续走网关,剩下的走本地,如下

proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API + '/house/bedroom']: {target: `http://localhost:8080`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}},[process.env.VUE_APP_BASE_API + '/house']: {target: `http://localhost:9204`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API + '/house']: ''}},[process.env.VUE_APP_BASE_API]: {target: `http://localhost:8080`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}
}

4.新建模块

新增以com.ruoyi开头的模块

在 ruoyi-modules 上右键,new=》module,Parent 选择 ruoyi-modules,name 以 ruoyi-my 为例。如下图:

新建模块

接下来修改 ruoyi-my 的 pom 文件,直接复制 ruoyi-system 的 dependencies 节点和 build 节点。创建包结构,创建启动类(复制 system 模块的启动类修改名称),创建 bootstrap.yml(同样复制 system 模块,修改端口和服务名称)。如下图:

目录结构和bootstrap.yml

接下来登陆 nacos,克隆 ruoyi-system-dev.yml ,命名为 ruoyi-my-dev.yml,修改 mybatis.typeAliasesPackage,改为 com.ruoyi.my,发布。如下图:

nacos上的配置文件

然后修改 ruoyi-gateway-dev.yml,添加新增的模块,发布。如下图:

网关配置

关于上图中出现的 myService 的说明:myService 是和 api 中的 url 关联的。api如下:

// 查询测试用列表
export function listTest(query) {return request({url: '/myService/test/list',method: 'get',params: query})
}

启动新模块后就可以访问了。

新增不以 com.ruoyi 开头的模块

在“新增 com.ruoyi 开头的模块”的基础上做以下修改:以 com.mypkg.my 为例

  1. 修改 nacos 上对应配置文件,修改 mybatis.typeAliasesPackage 为 com.mypkg.my
  2. 新建 annotation 包,将 ruoyi-common 模块下 ruoyi-common-security子模块下的com.ruoyi.common.security.annotation.EnableCustomConfig.java 类复制过来,修改 @MapperScan 的值为 com.mypkg.**.mapper。接着将启动类上的 @EnableCustomConfig 注解改引用 annotation 包下的 EnableCustomConfig。如下图:

EnableCustomConfig

启动类

启动项目即可。

5.将模块抽取为单独的项目

首先,运行 mvn install 命令,将 ruoyi 的包安装到本地仓库,因为之后会用到这些包。直接在 idea 里运行就可以。如下图:

install ruoyi 各模块

以“新增不以 com.ruoyi 开头的模块” 为例。先将 ruoyi-my 文件夹复制到一个新的目录,然后用 idea打开。然后修改 pom.xml 文件,修改 parent 节点,指向 ruoyi。如下:

修改pom的parent节点

运行启动类,结束。

如果是以“新增以 com.ruoyi开头的模块” 为基础,那么需要添加“新增不以 com.ruoyi 开头的模块”的第2步,迁移 EnableCustomConfig 类。

6.服务接口的定义和服务间调用

以“新增不以 com.ruoyi 开头的模块” 为例。在原项目里建两个模块:my-client 和 my-server 。my-clinet 里编写对外提供的远程调用接口。将原来的逻辑迁移进 my-server 。迁移的时候要修改两个地方:主 pom 的 build 节点和 my-server pom 的 build 节点。将原主 pom 的build 节点迁移至 my-server 的pom里。主pom改用 maven-compiler-plugin 。另外,建议指定3个pom的 groupId 、artifactId、version,这样别的模块引用的时候不会混乱。如下:

主pom和my-server的pom
// 主pom
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration><version>${maven-compiler-plugin.version}</version></plugin></plugins>
</build>

my-client 的创建参照 ruoyi-api 即可。有一点需要注意,新建的 fallbackFactory 接口要在 resource.META-INF.spring.factories 里注册,如下图:

重复“新增不以 com.ruoyi 开头的模块” ,新建一个项目 ruoyi-my2,ruoyi-my2 调用 ruoyi-my 创建的服务。

首先 mvn install ruoyi-my 项目。ruoyi-my2 的 pom 文件中添加 ruoyi-my 项目的 my-client 的引用,不需要整个引用 ruoyi-my。然后在 annotation 包中新建接口 EnableRyFeignClients,修改启动类对 EnableRyFeignClients 的引用,改引用自定义的 EnableRyFeignClients。接着修改 EnableRyFeignClients 的 basePackages。因为 OpenFeign 默认只扫描启动类所在目录及子目录,所以默认扫不到其他包里定义的远程调用接口。EnableRyFeignClients 内容如下:

import java.lang.annotation.*;/*** 自定义feign注解* 添加basePackages路径* * @author ruoyi*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@EnableFeignClients
public @interface EnableRyFeignClients
{String[] value() default {};String[] basePackages() default { "com.ruoyi", "com.mypkg" };Class<?>[] basePackageClasses() default {};Class<?>[] defaultConfiguration() default {};Class<?>[] clients() default {};
}

ruoyi-my2 的 pom 文件中添加对 my-client 的引用:

<dependency><groupId>com.mypkg</groupId><artifactId>my-client</artifactId><version>1.0.0</version>
</dependency>

然后就可以调用 RemoteMyService 服务了。

7.部署运行

  • jar 包运行

打包后直接 java -jar ***.jar 会报异常:

2020-08-01 22:04:19.429 ERROR 15556 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : parse data from Nacos error,dataId:application-dev.yml,data:#请求处理的超时时间
......
org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1

参考文章NACOS MalformedInputException 无法读取中文配置问题,解决办法是运行时指定编码格式:

java -D'file.encoding=utf-8' -jar .\ruoyi-auth-2.0.0.jar
  • Redis 只能 localhost 访问,本机 IP 访问报错

报错内容:io.lettuce.core.RedisException: java.io.IOException: 远程主机强迫关闭了一个现有的连接。

参考redis本机能访问 远程不能访问的问题,解决办法:

  1. 给 Redis 添加密码
  2. 注释掉 bind 127.0.0.1
  • docker 运行 nacos

开发环境下 nacos 使用单机版。配置参考了docker内搭建单机模式的nacos,但是原文章写的比较早,参数已经发生了变化,所以以下文为准(2020-08-02版)。建议直接参考官方的参数说明:nacos-docker

  1. 拉取镜像

    docker pull nacos/nacos-server
  2. 启动镜像
    docker run --env-file=env.list --name nacos -d -p 8848:8848 nacos/nacos-server

    env.list 内容

    MODE=standalone
    SPRING_DATASOURCE_PLATFORM=mysql
    MYSQL_SERVICE_DB_NAME=ry-config
    MYSQL_SERVICE_HOST=192.168.1.109
    MYSQL_SERVICE_USER=root
    MYSQL_SERVICE_PASSWORD=root

    如果使用的虚拟机(我用的vmware),则需要将主机的 8848 端口映射到虚拟机的 8848 端口,这样其他电脑才能访问到 docker 里的 nacos。步骤是:编辑=》虚拟网络编辑器=》更改设置=》NAT设置=》添加,

  • docker 运行 ruoyi 模块

运行网关模块,发现没有注册到nacos。运行命令: docker logs 容器id,发现报错: java.net.NoRouteToHostException: No route to host (Host unreachable)。解决办法:防火墙开放相应端口。

  • 开发环境 docker 部署注意事项

默认情况下,docker 内部网络和外部是隔离的。启动的时候讲宿主机的 8080 端口映射到 docker 内网关模块的 8080 端口,这样外部通过网关访问容器内的服务没有问题,内部服务间的调用也没有问题。但是我本地访问 docker 内部的服务的时候就访问不到了,因为 docker 内服务的 IP 都是172.*。我遇到的报错提示是:请求 auth 时超时。解决办法是修改docker的网络为 host,这样服务会共用宿主机的 IP ,访问就正常了。docker 的四种网络模式的区别可以参看:Docker四种网络模式。

若依微服务版(ruoyi-cloud)使用记录相关推荐

  1. SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  2. 若依微服务版怎样新增业务子模块并使用代码生成实现对表的增删改查

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在前 ...

  3. 若依微服务版手把手教你本地搭建环境并运行前后端项目

    场景 若依微服务版RuoYi-Cloud,基于Spring Boot.Spring Cloud & Alibaba.OAuth2的前后端分离的后台管理系统. RuoYi-Cloud 是一个 J ...

  4. 若依微服务版登录流程源码分析1

    若依微服务版登录流程涉及到很多模块,本章先从网关讲起 验证码 验证码配置 先来看配置中心的网关配置文件ruoyi-gateway-dev.yml,其中有这么一段 # 安全配置 security:# 验 ...

  5. 若依微服务版怎样修改Nacos中配置文件使Url不受权限认证跳过Token验证

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  6. 若依微服务版后台服务通过jar包部署到Windows服务器

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在前 ...

  7. 若依微服务版怎样实现不同业务模块下实体和mapper互相调用

    场景 若依微服务版怎样新增业务子模块并使用代码生成实现对表的增删改查: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109524 ...

  8. 修改若依微服务版遇到的的问题

    1. 进入若依若依官网 2 选择修改器 3. 选择 4 选择 5 下载成功之后,运行如下 6. 修改成功 小提示 如果需要改之前的项目名,则把之前的项目删除多余的依赖,比如 target目录,把前端项 ...

  9. EMIS快速开发平台 - 微服务版技术选型

    http://demo.zuoyour.com/system/login EMIS快速开发平台 - 微服务版技术选型 开发框架:Spring Boot 2.1.3.RELEASE 微服务:Spring ...

  10. idea无法导入主题jar包_若依微服务版后台服务通过jar包部署到Windows服务器

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在前 ...

最新文章

  1. 限流降级神器-哨兵(sentinel)原理分析
  2. linux 修改ip地址_Day.19 变更IP地址
  3. 强化科技硬实力 厚植创新软实力——访中国科学院院士唐本忠
  4. 用户 'IIS APPPOOL\DefaultAppPool'登录失败
  5. python导入哨兵数据_Python 下载哨兵Sentinel数据(Sentinel-1~3)
  6. Client向Server send数据,返回WSAEWOULDBLOCK错误
  7. Console-算法[]-数组求最大值和最小值(只能遍历一次)
  8. 禁止mysql+root,禁止MySQL root远程访问
  9. 使用 SAP WebIDE 创建 SAP Fiori Elements 应用
  10. Flink应用实战案例50篇(一)- Flink SQL 在京东的优化实战
  11. imagemagick for java_ImageMagick使用for java(im4java)
  12. java的trans文件大小写_文件大小写转换与后缀不变
  13. 表达式语言输出map
  14. 微信公众号查询粉丝列表
  15. 发生内部错误。请与 microsoft 支持部门联系。_设计变更、工程签证、确认单、工程洽商、联系单、会签的是干啥的?有啥区别?...
  16. JavaWeb前端: JavaScript 简介
  17. <Halcon>基于形状和轮廓的模板匹配
  18. Vue、JS——定时器倒计时封装
  19. matlab中给信号添加高斯白噪声的两种方法,awgn计算过程,randn函数
  20. 电子邮件签名档 HTML 手写时的折腾(附 原创工具)

热门文章

  1. 进程在运行过程中的三种基本状态是什么?画出其转换图。
  2. (FJWC2020)DTOJ 4681. 楼房搭建
  3. FlashFXP.v3.6.0.1240.Final-YAG
  4. Hive查询报partion错误
  5. Vue的双向数据绑定原理是什么?(前端面试题)
  6. 《程序设计解题策略》——1.2 利用最小生成树及其扩展形式解题
  7. 假使世界原来不像你预期,也要做最好的你
  8. 如何使用Application Loder 上传app
  9. [Unity3D]Unity3D游戏开发之自动寻路与Mecanim动画系统的结合
  10. 基于混合整数线性规划的电力系统机组组合优化研究