一切皆留「轨迹」

ruoyi 微服务版本使用手记

Mar 21,2026
8
0

硬件环境:

· Windows开发主机

· CentOS Stream 10(中间件、数据库服务器)

软件环境:

· IntelliJ IDEA 2023.2.2

· jdk1.8

· maven 3.6.3

其他:

· CentOS Stream 10(中间件、数据库服务器) 使用 Docker version 29.2.1, build a5c7197,并安装1Panel方便操作

· Linux安装Docker: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

· (可选)Windows Docker官方安装文档:https://docs.docker.com/desktop/setup/install/windows-install/

· (可选)安装1Panel:

bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"


根据ruoyi官网配置jdk和maven

配置jdk1.8环境变量

Java环境验证(Windows命令):

java -version #显示java版本即为成功

配置maven环境变量

Maven环境验证(Windows命令):

mvn -v #显示Maven版本即为成功

拉取ruoyi SpringCloud后端项目

ruoyi官网:https://doc.ruoyi.vip/

微服务版本项目链接:https://gitee.com/y_project/RuoYi-Cloud

HTTPS克隆地址:https://gitee.com/y_project/RuoYi-Cloud.git

开发工具导入项目

1、IntelliJ IDEA → Open → 项目文件夹 →(等待自动识别项目和依赖下载)

2、修改各ruoyi服务的resources/bootstrap.yml的服务的地址(nacos、sentinel等服务的提供地址),本机做mysql、nacos等中间件服务的使用默认的127.0.0.1即可

3、使用docker一键运行需要的服务中间件 (nacos、mysql、redis、nginx,ruoyi基础服务... ...)

3.0 打包ruoyi各服务

IntelliJ IDEA(左下角)→点击终端(Termina)→ 运行以下命令:

cd .\bin\

.\package.bat

(等待编译打包jar完成)

3.1 编译打包jar完成后将各服务target目录中的的jar包复制到docker目录下对应的各jar目录下

3.2 复制项目的sql目录下的.sql文件到docker/db下

3.3 docker/docker-compose.yml修改:mysql.volumes中增加挂载目录:- ./mysql/db:/docker-entrypoint-initdb.d(解决docker启动mysql容器后不执行sql初始化不执行错误)

3.4 docker/docker-compose.yml修改:ruoyi-nacos.image改为:nacos/nacos-server:v2.2.3(解决nacos最新版本强制配置鉴权启动失败错误)

3.5 docker/nacos/dockerfile文件FROM修改为:nacos/nacos-server:v2.2.3

3.6(可选)去除nginx的安装,我想使用1Panel的 OpenResty ,去除docker-compose.yml的nginx相关配置即可

3.7 (可选)打包前端项目给nginx运行前端项目:

ruoyi-ui/vue.config.js修改process.env.VUE_APP_BASE_API的IP地址

在终端(Termina)运行命令

cd ..\ruoyi-ui\

npm install

npm run build:prod

复制前端项目资源dist目录到docker/nginx/html下

3.8 复制项目的docker目录到Docker程序所在主机(以Linux的/root/ruoyi目录下为例)

3.9 进入docker-compose.yml所在目录:cd /root/ruoyi/docker

3.10 加载各容器:docker compose up -d

(若遇到ERROR [ruoyi-gateway internal] load metadata for docker.io/library/openjdk:8-jre错误,把ruoyi目录各若依组件下的dockerfile文件的FROM xxxx 改成FROM docker.1ms.run/eclipse-temurin:8-jre)

3.等待镜像下载和部署完成(ruoyi的各服务可能启动不了,不用管,在开发工具独立运行,待gateway、auth、file等服务定稿要进行部署了,再使用docker部署一键启动)

3.12 http://192.168.30.192:8848/nacos/index.html 去nacos改各个yml配置中的个服务中间件的ip地址

项目模块开发

1、新建项目模块:右键ruoyi-modules→New→Module...→输入名称、Parent选择ruoyi-modules等信息→Create

2、编辑pom.xml,示例:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi-modules</artifactId>
        <version>3.6.7</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
​
    <artifactId>da-process</artifactId>
​
    <description>
         da-process数农加工管理
    </description>
​
    <dependencies>
​
        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
​
        <!-- SpringCloud Alibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
​
        <!-- SpringCloud Alibaba Sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
​
        <!-- SpringBoot Actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
​
        <!-- Mysql Connector -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>
​
        <!-- RuoYi Common DataSource -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-datasource</artifactId>
        </dependency>
​
        <!-- RuoYi Common DataScope -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-datascope</artifactId>
        </dependency>
​
        <!-- RuoYi Common Log -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-log</artifactId>
        </dependency>
​
        <!-- RuoYi Common Swagger -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-swagger</artifactId>
        </dependency>
​
    </dependencies>
​
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

记得点击右上角的Maven图标更新依赖

3、创建项目结构

3.1 启动类XxxxApplication.java 添加注解

@EnableCustomConfig
@EnableRyFeignClients
@SpringBootApplication

main函数示例:

public static void main(String[] args)
    {
        SpringApplication.run(DaProcessApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  数农加工管理模块启动成功   ლ(´ڡ`ლ)゙  \n" +
                " .-------.       ____     __        \n" +
                " |  _ _   \\      \\   \\   /  /    \n" +
                " | ( ' )  |       \\  _. /  '       \n" +
                " |(_ o _) /        _( )_ .'         \n" +
                " | (_,_).' __  ___(_ o _)'          \n" +
                " |  |\\ \\  |  ||   |(_,_)'         \n" +
                " |  | \\ `'   /|   `-'  /           \n" +
                " |  |  \\    /  \\      /           \n" +
                " ''-'   `'-'    `-..-'              ");
    }

3.2 resources目录下添加bootstrap.yml,注意指定一个未占用的端口号

bootstrap.yml内容参考:

# Tomcat
server:
  port: 9204
​
# Spring
spring:
  application:
    # 应用名称
    name: da-process
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.30.192:8848
      config:
        # 配置中心地址
        server-addr: 192.168.30.192:8848
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
​

3.3 (可选)创建banner.txt文件

文件内容示例:

Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}
    .___
  __| _/____            _____________  ____   ____  ____   ______ ______
 / __ |\__  \    ______ \____ \_  __ \/  _ \_/ ___\/ __ \ /  ___//  ___/
/ /_/ | / __ \_ /_____/ |  |_> >  | \(  <_> )  \__\  ___/ \___ \ \___ \
\____ |(____  /         |   __/|__|   \____/ \___  >___  >____  >____  >
     \/     \/          |__|                     \/    \/     \/     \/

在线生成链接:https://patorjk.com/software/taag/#p=display&f=Graffiti&t=da-process&x=none&v=4&h=4&w=80&we=false

3.4(可选)创建logback.xml,参考别的文件,注意修改模块名

4、Nacos添加(模块名-dev.yml)配置,参考别的配置文件,注意修改配置的IP地址、端口号、包名、接口文档的描述文字等信息;配置可根据当前模块的功能动态配置(比如pom.xml中没有用到mybatis,就可以不配置mybatis相关的内容)

以 模块命 da-process 为例,da-process-dev.yml 内容

# spring配置
spring:
  redis:
    host: 192.168.30.192
    port: 6379
    password: 
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: ruoyi
        loginPassword: 123456
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        connectTimeout: 30000
        socketTimeout: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
          # 主库数据源
          master:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://192.168.30.192:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
            username: root
            password: password
          # 从库数据源
          # slave:
            # username: 
            # password: 
            # url: 
            # driver-class-name: 
​
# mybatis配置
mybatis:
    # 搜索指定包别名
    typeAliasesPackage: com.ruoyi.daprocess
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mapper/**/*.xml
​
# springdoc配置
springdoc:
  gatewayUrl: http://localhost:8080/${spring.application.name}
  api-docs:
    # 是否开启接口文档
    enabled: true
  info:
    # 标题
    title: '数农加工管理接口文档'
    # 描述
    description: '数农加工管理接口描述'
    # 作者信息
    contact:
      name: GuiJi
      url: https://guiji20.top
​

5、创建controller包,并添加一个测试Controller类

以TestController.java为例,TestController.java内容示例:

@RestController
@RequestMapping("/test")
public class TestController extends BaseController {
    /**
     * 测试接口1:GET请求(无参数)
     * 访问路径:http://localhost:9204/process/test/hello
     */
    @GetMapping("/hello")
    public AjaxResult hello() {
        // 封装返回结果(若依通用 AjaxResult)
        return AjaxResult.success("DA-PROCESS 模块测试成功!", "Hello Da-Process!");
    }
}

6、启动项目

7、测试- 直接访问

7.1 网页直接访问http://localhost:9204/test/hello测试联通性

8、测试-通过网关访问

8.1 Nacos修改网关ruoyi-gateway-dev.yml配置文件,增加模块配置内容,注意修改模块名

        # 数农加工管理
        - id: da-process
          uri: lb://da-process
          predicates:
            - Path=/daprocess/**
          filters:
            - StripPrefix=1

8.2 重启gateway网关服务

8.3 网关访问接口

8.3.1 浏览器打开若依登录界面,按F12进入调试界面切换到网络(network) ,登录用户,获取token令牌

8.3.2 PostMan或者APIFox等工具,设置请求令牌后请求接口http://localhost:8080/daprocess/test/hello测试联通性(daprocess是ruoyi-gateway-dev.yml配置文件的predicates.Path配置的)