若依前后端分离版配置流程
1.前言
若依框架更新速度很快,新版功能更加完善。我们如果一直用老版本代码,会失去很多功能。但是,我们每次更新版本,配置会很麻烦。本文会详细介绍,如何将快速配置若依前后端分离版。有些内容我已经完成,不会重复介绍,但是我会标明文章链接。本文是完全免费的,如果大家不想浪费时间配置,可以直接下载配置好的资源《若依前后端分离版3.8.9配置资源》。
2.启动配置
关于启动配置,可以查看我的文章《从零开始学若依框架-下载和环境初始化》,里面介绍的非常详细了。如果你使用的脚手架版本过高,导致前端启动失败。可以在package.json文件中,将scripts前三项加上以下代码,并保存。如果没法判断是否需要加,等启动报错时再加即可。
SET NODE_OPTIONS=--openssl-legacy-provider &&
3.日志配置
控制输入日志没有颜色,看起来很不舒服。如果也想让控制台输出日志时带颜色,可以打开ruoyi-admin/src/main/resources/logback.xml,将日志输出格式用以下代码替换。
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %green(%5p) %magenta(${PID}) --- [%15.15t] %cyan(%40.440logger) : %msg%n" />
4.集成Mybatis-Plus和代码生成器
如果想使用Myabtis-Plus,并且构建Mybatis-Plus代码生成器,可以查看我的文章《若依前后端分离版创建Mybatis-Plus代码生成器》。
5.基础配置
1.Redis配置
1.本地同时运行多个若依系统后端是没有问题的,但是在一个服务器上同时运行多个若依后端会报错,出现这个原因是多个后端同时用一个Redis配置导致的。为了避免上面问题出现,在Redis保存时,加上项目名称作为前缀,用于区分不同的项目。在com.ruoyi.framework.config.properties包下新增RedisProperties类,同时用以下代码替换。
package com.ruoyi.framework.config.properties;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.stereotype.Component;
import java.nio.charset.Charset;
@Component
public class RedisProperties implements RedisSerializer<String> {
@Autowired
private RuoYiConfig config;
private final Charset charset;
public RedisProperties()
{
this(Charset.forName("UTF8"));
}
public RedisProperties(Charset charset)
{
this.charset = charset;
}
@Override
public byte[] serialize(String string) throws SerializationException
{
// 通过项目名称ruoyi.name来定义Redis前缀,用于区分项目缓存
if (StringUtils.isNotEmpty(config.getName()))
{
return new StringBuilder(config.getName()).append(":").append(string).toString().getBytes(charset);
}
return string.getBytes(charset);
}
@Override
public String deserialize(byte[] bytes) throws SerializationException
{
return (bytes == null ? null : new String(bytes, charset));
}
}
2.打开com.ruoyi.framework.config.RedisConfig类,用以下代码替换。
package com.ruoyi.framework.config;
import com.ruoyi.framework.config.properties.RedisProperties;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redis配置
*
* @author ruoyi
*/
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport
{
@Bean
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory, RedisProperties redisProperties)
{
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
// template.setKeySerializer(new StringRedisSerializer());
template.setKeySerializer(redisProperties);
template.setValueSerializer(serializer);
// Hash的key也采用StringRedisSerializer的序列化方式
// template.setHashKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(serializer);
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
@Bean
public DefaultRedisScript<Long> limitScript()
{
DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
redisScript.setScriptText(limitScriptText());
redisScript.setResultType(Long.class);
return redisScript;
}
/**
* 限流脚本
*/
private String limitScriptText()
{
return "local key = KEYS[1]\n" +
"local count = tonumber(ARGV[1])\n" +
"local time = tonumber(ARGV[2])\n" +
"local current = redis.call('get', key);\n" +
"if current and tonumber(current) > count then\n" +
" return tonumber(current);\n" +
"end\n" +
"current = redis.call('incr', key)\n" +
"if tonumber(current) == 1 then\n" +
" redis.call('expire', key, time)\n" +
"end\n" +
"return tonumber(current);";
}
}
2.参数配置
1.由于上面区分不同项目Redis使用了项目名称作为前缀,需要根据实际情况修改项目名称(ruoyi.name)。如果不想使用默认文件上传地址,也可以修改文件上传地址(ruoyi.profile)。这两个配置均在ruoyi-admin/src/main/resources/application.yml文件中。我这里就先不修改参数配置的内容了,后面我会使用包名修改器根据实际情况进行修改。
2.如果想关闭swagger,可以打开ruoyi-admin/src/main/resources/application.yml文件,将swagger.enabled设置为false。
3.如果对目前日志保存位置不满意,可以打开ruoyi-admin/src/main/resources/logback.xml文件进行修改。
4.除了yml文件可以修改一部分参数外,有很多参数保存在com.ruoyi.common.constant.Constants类中。如果有需要,可以根据实际情况进行修改。
6.前端配置
1.滚动条配置
1.用户管理功能,部门树内容过高,下拉查看时,看不见搜索框,并且出现大量空白页面,使用效果很不好。同时,内容过多也是导致整体页面,滑动滚动条,也是导致整个页面下滑,看不见顶部导航标签。前端打开src\assets\styles\sidebar.scss文件,在.main-container样式中以下代码。
// 新增
overflow: hidden;
2.打开src\views\system\user\index.vue文件,在左侧部门树的el-col加上类py-left-tree。并且在文件最后,加上样式下面设置。
<style lang="css" scoped>
.py-left-tree {
height: calc(100vh - 84px - 20px * 2);
overflow: auto;
}
</style>
3.打开src\layout\components\AppMain.vue文件,在.app-main类样式设置中,注释掉overflow: hidden配置,同时新增下面配置。
/* 新增 */
height: calc(100vh - 50px - 34px);
overflow: auto;
4.配置好上面样式后,滚动条位置更加合理。
2.网页配置
1.如果想修改网站名称,需要修改多处位置。找到.env.development、.env.production和.env.staging三个文件,分别修改里面的VUE_APP_TITLE的值,修改了不同环境下的网页标题。同时,这个三个文件中的VUE_APP_BASE_API的值,用于访问后端接口的前缀,前端路径包含这个值,就会自动访问后端接口。前端路径配置时,应避开这个值,同时这个值在项目部署到服务器时会用到。如果想修改这个值,应保证项目配置和服务器配置同步。
2.修改配置文件中的name后面的名称,这个一般不生效。只有当上面配置文件中VUE_APP_TITLE的值为空时,才生效。
3.新版若依框架,侧边栏的系统名称是从配置文件中读取,如果上面几步名称配置好了,就不用修改了。但是,老版若依框架,系统名称是自己填写的,需要打开src\layout\components\Sidebar\Logo.vue文件,将title修改成需要的网站名称。
4.我不喜欢在侧边栏显示网站名称和网站图标,因为网站名称过长时,并不是十分好看。如果也想和我一样让侧边栏只显示菜单项,可以进行此序号的配置。打开src\layout\components\Sidebar\index.vue文件,将logo显示注释掉。
5.如果想修改网页图标,打开src\assets\logo文件夹,用新图标文件替换logo.png文件即可。
3.菜单配置
1.文档源码和文档地址菜单功能,在项目使用时不需要,可以注释掉。打开src\layout\components\Navbar.vue文件,将源码地址和文档地址相关代码注释掉。
2.一般布局设置功能,我会也会隐藏。如果也需要隐藏此功能,可以打开src\layout\components\Navbar.vue文件,将布局设置功能相关代码隐藏。
3.若依官网菜单功能,一般不使用,可以删除。同时,系统管理、系统监控和系统工具三个功能,一般给管理员使用,可以将三个功能排序依次设置为97、98和99。由于菜单管理删除功能,先要将菜单停用,然后才能删除,我直接删除了数据库sys_dept表中关于若依官网的数据。由于修改原有数据库的数据,可以将现有数据库导出为sql文件,以后直接使用此sql,我将此文件命名为py.sql。
7.包名修改
如果想修改若依框架的模块名称、包名等若依信息,可以使用我的下载资源《飘逸-若依前后端分离版包名修改器》,具体使用方式可以查看我的文章《若依前后端分离版包名修改器》。
8.总结
如果此文章对大家有所帮助的话,希望能点赞支持下,您的支持就是我最大的动力。我会不定时发布关于若依框架、Java、Vue和uniapp等方面的内容,如果大家感兴趣的话,可以关注我。
如果大家不想浪费时间配置,可以直接下载配置好的资源《若依前后端分离版3.8.9配置资源》。