一、环境准备
官网:doc.ruoyi.vip/ruoyi-cloud...
- MySQL 8版本(windows安装教程:blog.csdn.net/Floating_wi...)
- nacos 2.0.4
- 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连接信息:
- 网关(
ruoyi-gateway-dev.yml
):redis - 权限(
ruoyi-auth-dev.yml
):redis - 系统(
ruoyi-stytem-dev.yml
):mysql、redis - 定时任务(
ruoyi-job-dev.yml
):mysql、redis - 代码生成(
ruoyi-gen-dev.yml
):mysql、redis
四、启动
如果你使用的是idea,找到View -> Tool Windows -> Services,将其添加到窗口。

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

必须启动的服务如下:
- 网关(
ruoyi-gateway
) - 权限(
ruoyi-auth
) - 系统(
ruoyi-system
)
其他都是可选的。
五、如何自增模块
在第二步,我们已经有了两个数据库,分别是:
ry-cloud
ry-config
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 前端配置
- 在菜单里添加菜单(如果需要),以及目录(也即功能点)
- 在前端项目的views里创建对应的
index.vue
文件 - 接口调用时,需要配置为网关拼路径的形式,上例在前端的调用路径应该是
/interface/test
六、如何批量修改项目名包名
这里推荐一个python窗口程序,非常好用:gitee.com/woaiziyuan/...
直接执行会报错:某个路径下的配置文件找不到。同名配置文件可在项目中找到,将这个文件复制到不存在的路径,再次运行就可以了。
大部分的名字都会得到修改,但是还会有一些遗漏,可以依次把每一个微服务启动,排查一下。
七、如何将接口加入白名单
比如现在有服务interface下所有接口,都不需要token直接就可以访问,可以在nacos的网关配置进行配置:
yaml
# 安全配置
security:
......
# 不校验白名单
ignore:
whites:
......
- /interface/**