ruoyi-cloud起步、新增模块和定制

一、环境准备

官网:doc.ruoyi.vip/ruoyi-cloud...

  1. MySQL 8版本(windows安装教程:blog.csdn.net/Floating_wi...
  2. nacos 2.0.4
  3. redis(版本在3以上)

二、项目的运行

数据库配置

项目代码下载完成后,找到代码目录下面的SQL脚本:

创建数据库ry-cloud,并导入ry_20240629.sql(必须),以及quartz.sql(定时任务相关,可选)。

之后,创建数据库ry-config,导入ry-config.sql

nacos配置(windows环境)

本地部署使用单机模式就可以了。

前往conf/application.properties,添加mysql数据源配置:

ini 复制代码
## If use MySQL as datasource:
spring.datasource.platform=mysql

## Count of DB:
db.num=1

## Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2

修改bin/startup.cmd,修改启动模式为单机模式:

rem就是注释的意思

ini 复制代码
rem set MODE="cluster"
set MODE="standalone"

然后执行startup.cmd就可以了。

三、nacos配置中心的修改

修改下面配置文件中的数据库、redis连接信息:

  1. 网关(ruoyi-gateway-dev.yml):redis
  2. 权限(ruoyi-auth-dev.yml):redis
  3. 系统(ruoyi-stytem-dev.yml):mysql、redis
  4. 定时任务(ruoyi-job-dev.yml):mysql、redis
  5. 代码生成(ruoyi-gen-dev.yml):mysql、redis

四、启动

如果你使用的是idea,找到View -> Tool Windows -> Services,将其添加到窗口。

然后点击Add service -> Run Configuration... ->下拉找到SpringBoot,点击,所有的微服务就添加进去了。

必须启动的服务如下:

  1. 网关(ruoyi-gateway
  2. 权限(ruoyi-auth
  3. 系统(ruoyi-system

其他都是可选的。

五、如何自增模块

在第二步,我们已经有了两个数据库,分别是:

  1. ry-cloud
  2. ry-config
  3. ry-seata

这三个库是系统运行所必须的。比如现在我们想要添加一个接口业务模块,名为ruoyi-interface

5.1 后端代码新增模块

【1】新增模块

ruoyi-modules下新建一个模块,名为ruoyi-interface,此时ruoyi-modules的modules标签应该新增了一个module,如下例:

xml 复制代码
<modules>
  <module>ruoyi-interface </module>
</modules>

【2】maven配置

在新建的ruoyi-interface下新增pom.xml,带注释的是需要修改的:

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.5</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <!-- 修改模块名称 -->
    <artifactId>ruoyi-modules-interface</artifactId>

    <!-- 修改模块描述 -->
    <description>
        ruoyi-interface接口模块
    </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>

【3】resources资源配置

src/main目录下创建java和resources目录,resources目录的文件可以先复制其他模块的,比如ruoyi-system,结构应该是这样:

diff 复制代码
resources
- mapper.interface    改为mapper.模块名
- banner.txt	    直接复制即可
- bootstrap.yml       
- logback.xml
bootstrap.yml 复制代码
# Tomcat
server:
  ## 端口号改为独特的
  port: 9205

# Spring
spring: 
  application:
    ## 应用名称
    name: ruoyi-interface
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
logback.xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
  <!-- 日志存放路径 -->
  <property name="log.path" value="logs/ruoyi-interface" />
  <!-- 日志输出格式 -->
  <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

  <!-- 控制台输出 -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
  </appender>

  <!-- 系统日志输出 -->
  <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/info.log</file>
    <!-- 循环政策:基于时间创建日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 日志文件名格式 -->
      <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 日志最大的历史 60天 -->
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 过滤的级别 -->
      <level>INFO</level>
      <!-- 匹配时的操作:接收(记录) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配时的操作:拒绝(不记录) -->
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/error.log</file>
    <!-- 循环政策:基于时间创建日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 日志文件名格式 -->
      <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 日志最大的历史 60天 -->
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 过滤的级别 -->
      <level>ERROR</level>
      <!-- 匹配时的操作:接收(记录) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配时的操作:拒绝(不记录) -->
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <!-- 系统模块日志级别控制  -->
  <logger name="com.ruoyi" level="info" />
  <!-- Spring日志级别控制  -->
  <logger name="org.springframework" level="warn" />

  <root level="info">
    <appender-ref ref="console" />
  </root>

  <!--系统操作日志-->
  <root level="info">
    <appender-ref ref="file_info" />
    <appender-ref ref="file_error" />
  </root>
</configuration>

【4】java部分配置

不考虑数据库,我们只添加一个启动类,以及一个简单的控制器,示例如下:

diff 复制代码
com.ruoyi.interface
- controller
---- TestController
- RuoYiInterfaceApplication
swift 复制代码
package com.ruoyi.interface;

import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 接口模块
 *
 * @author yharim
 */
@EnableCustomConfig
@EnableRyFeignClients
@SpringBootApplication
public class RuoYiInterfaceApplication {
    public static void main(String[] args)
    {
        SpringApplication.run(RuoYiInterfaceApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  接口模块启动成功   ლ(´ڡ`ლ)゙  \n" +
                           " .-------.       ____     __        \n" +
                           " |  _ _   \      \   \   /  /    \n" +
                           " | ( ' )  |       \  _. /  '       \n" +
                           " |(_ o _) /        _( )_ .'         \n" +
                           " | (_,_).' __  ___(_ o _)'          \n" +
                           " |  |\ \  |  ||   |(_,_)'         \n" +
                           " |  | \ `'   /|   `-'  /           \n" +
                           " |  |  \    /  \      /           \n" +
                           " ''-'   `'-'    `-..-'              ");
    }
}
less 复制代码
/**
 * 测试接口不需要授权
 *
 * @author yharim
 */
@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping()
    public AjaxResult test() {
        return AjaxResult.success("hello, world,无需权限需在网关配置");
    }
}

5.2 nacos配置中心

需在nacos的配置中心新建配置文件,该例应当创建ruoyi-interface-dev.yml,内容如下(带##的依然是需要重点关注的):

yaml 复制代码
# spring配置
spring:
  redis:
    host: localhost
    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://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
            username: root
            password: 123456
          # 从库数据源
          # slave:
            # username: 
            # password: 
            # url: 
            # driver-class-name: 

# mybatis配置
mybatis:
    ## 搜索指定包别名
    typeAliasesPackage: com.ruoyi.erpinterface
    # 配置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: RuoYi
      url: https://ruoyi.vip

此时,就可以启动服务了。比如想要调用之前的测试接口,可以通过http://localhost:9204/test来调用。

5.3 网关配置

修改nacos配置中心中的ruoyi-gateway-dev.yml,在对应位置添加网关信息:

ini 复制代码
        # 工程
        - id: ruoyi-interface
          uri: lb://ruoyi-interface
          predicates:
            - Path=/interface/**
          filters:
            - StripPrefix=1

5.4 前端配置

  1. 在菜单里添加菜单(如果需要),以及目录(也即功能点)
  2. 在前端项目的views里创建对应的index.vue文件
  3. 接口调用时,需要配置为网关拼路径的形式,上例在前端的调用路径应该是/interface/test

六、如何批量修改项目名包名

这里推荐一个python窗口程序,非常好用:gitee.com/woaiziyuan/...

直接执行会报错:某个路径下的配置文件找不到。同名配置文件可在项目中找到,将这个文件复制到不存在的路径,再次运行就可以了。

大部分的名字都会得到修改,但是还会有一些遗漏,可以依次把每一个微服务启动,排查一下。

七、如何将接口加入白名单

比如现在有服务interface下所有接口,都不需要token直接就可以访问,可以在nacos的网关配置进行配置:

yaml 复制代码
# 安全配置
security:
  ......
  # 不校验白名单
  ignore:
    whites:
      ......
      - /interface/**
相关推荐
caihuayuan53 小时前
升级element-ui步骤
java·大数据·spring boot·后端·课程设计
佩奇的技术笔记4 小时前
Java学习手册:单体架构到微服务演进
java·微服务·架构
Kookoos4 小时前
ABP vNext + EF Core 实战性能调优指南
数据库·后端·c#·.net·.netcore
揣晓丹5 小时前
JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
java·vue.js·spring boot·后端·开源
豌豆花下猫7 小时前
Python 3.14 新特性盘点,更新了些什么?
后端·python·ai
caihuayuan57 小时前
Vue生命周期&脚手架工程&Element-UI
java·大数据·spring boot·后端·课程设计
明月与玄武10 小时前
Spring Boot中的拦截器!
java·spring boot·后端
菲兹园长10 小时前
SpringBoot统一功能处理
java·spring boot·后端
muxue17810 小时前
go语言封装、继承与多态:
开发语言·后端·golang
开心码农1号11 小时前
Go语言中 源文件开头的 // +build 注释的用法
开发语言·后端·golang