后台功能

article/2025/10/8 4:43:20

#🌌 后台功能

后台功能模块,包含主控面板,开发管理,日志管理,系统监控,通知公告,文件管理,定时任务。

#1. 主控面饭

主控面板展示了系统的一些统计信息,采用默认的ant design pro框架自带的界面。可以根据需要调整为系统需要的图表等信息。

#2. 开发管理

开发管理包含一些开发上会用到的一些配置或者功能,利用这些功能,可以规范一些约束,也可后端人员进行开发。

#2.1 系统配置

对系统中的变量、常量进行在线维护。

在线维护的好处是配置一目了然,并且使用时实时更新,程序中拿到这个配置,可以控制某些业务开关或业务属性。

👍 强烈建议过目一遍所有配置,心中有个印象!开发时候可以联想到就行! 👍

#2.1.1 新增和编辑参数介绍

👉唯一编码:一般以大写单词下划线分割的方式。

👉系统参数:系统参数为系统运行中的核心机制会用到的参数,如果选定是系统参数,则这个参数不能被删除,但是允许修改。

👉所属分类:为了方便区分这些常量的用途而加的分类。这个下拉的选项在字典里配置,如下图。

👉参数值:字符串类型。

#2.1.2 程序中使用配置

首先在线添加一个配置,例如添加了一个验证码开关的配置。

第二步,在程序ConstantContextHolder中添加一个方法,用于获取参数值。

第三步,在程序任何位置都可以通过静态调用的方式来调用这个值了。

#2.2 字典管理

字典维护了系统和业务层级的一些枚举属性。字典相关的接口查看SysDictTypeController类。

👉字典的唯一编码一般用小写单词下划线分割的方式。

#2.3 接口文档

接口文档使用了swagger

 

#2.3.1 使用注解创建swagger文档

👉 @Api注解加到控制器上,如下示例:

@Api("系统应用控制器")
@RestController
public class SysAppController {
...
}

👉 @ApiOperation注解加在控制器方法上,response用来写返回类型,如下示例:

@ApiOperation(value = "查询应用列表", response = SysApp.class)
public ResponseData page(SysAppParam sysAppParam) {return new SuccessResponseData(sysAppService.page(sysAppParam));
}

👉 @ApiModel加在请求和返回参数类的类上,如下示例:

@ApiModel
public class SysAppParam extends BaseParam {
}

👉 @ApiModelProperty加在请求和返回参数类的类中的属性上,如下示例:

@ApiModelProperty("名称")
private String name;

#2.4 短信

短信,文件,邮件的发送封装在如下的开源代码库,目的是为了封装一些通用的第三方组件给每个项目使用:

https://gitee.com/stylefeng-Roses/roses-kernel/tree/new-cloud/

#2.4.1 如何发送短信

👉 首先引入kernel-sms包

<dependency><groupId>cn.stylefeng.roses</groupId><artifactId>kernel-sms</artifactId><version>3.0.4</version>
</dependency>

👉 如果是用阿里云的短信,就再加上阿里云的sdk

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.4.6</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-ecs</artifactId><version>4.17.6</version>
</dependency>

如果用腾讯云就再加上腾讯云的sdk

<dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.1.57</version>
</dependency>

👉 在管理系统后台,配置相关的key和secret属性

👉 在Configuration类中配置短信发送器SmsSender,如果是用腾讯云,对应的就用TencentSmsSender

/*** 短信发送配置,短信发送的配置属性都在数据库的sys_config表中* <p>* 默认开启了阿里云的短信配置** @author stylefeng* @date 2020/6/6 22:27*/
@Configuration
public class SmsSenderConfig {/*** 短信发送器(阿里云)** @author stylefeng* @date 2020/6/6 22:30*/@Beanpublic SmsSender aliyunSmsSender() {// 从数据库配置读取阿里云配置AliyunSmsConfigs aliyunSmsConfigs = ConstantContextHolder.getAliyunSmsConfigs();AliyunSmsProperties aliyunSmsProperties = new AliyunSmsProperties();BeanUtil.copyProperties(aliyunSmsConfigs, aliyunSmsProperties);return new AliyunSmsSender(new MapBasedMultiSignManager(), aliyunSmsProperties);}}

👉 之后,在程序中,就可以注入SmsSender来发送短信了,参考cn.stylefeng.guns.sys.modular.sms.controller.SmsSenderController

/*** 发送短信* <p>* 如果是腾讯云,params要用LinkedHashMap,保证顺序** @param phone        电话号码* @param templateCode 模板号码* @param params       模板里参数的集合* @author fengshuonan* @date 2018/7/6 下午2:32*/
void sendSms(String phone, String templateCode, Map<String, Object> params);

#2.5 邮件

👉 同发送短信一样,首先引入发送邮件的核心包

<!--邮件发送服务-->
<dependency><groupId>cn.stylefeng.roses</groupId><artifactId>kernel-email</artifactId>
</dependency>

👉 在后台界面,配置邮件发送需要的一些参数

👉 在Configuration中配置发送邮件用的类

/*** 邮件发送控制器** @author stylefeng* @date 2020/6/6 22:27*/
@Configuration
public class MailSenderConfig {/*** 邮件发射器** @author stylefeng* @date 2020/6/9 23:13*/@Beanpublic MailSender mailSender() {EmailConfigs emailConfigs = ConstantContextHolder.getEmailConfigs();MailAccount mailAccount = new MailAccount();BeanUtil.copyProperties(emailConfigs, mailAccount);return new SimpleMailSender(mailAccount);}}

👉 这样就可以通过MailSender来发送邮件了,参考cn.stylefeng.guns.sys.modular.email.controler.EmailController类

/*** 邮件收发统一接口** @author fengshuonan* @date 2018-07-08-下午3:26*/
public interface MailSender {/*** 发送普通邮件** @author fengshuonan* @Date 2018/7/8 下午3:34*/void sendMail(SendMailParam sendMailParam);/*** 发送html的邮件** @author fengshuonan* @date 2020/6/9 22:58*/void sendMailHtml(SendMailParam sendMailParam);}

#3. 日志管理

日志包含了用户的访问日志和操作日志。

#3.1 访问日志

在用户登录和登出时,记录的日志。

#3.2 操作日志

在用户进行业务操作时候记录的日志,查看详情可以看请求类,参数,响应结果。

👉 如何记录操作日志?

一般操作日志加在controller层,只需要通过@BusinessLog注解即可完成,opType可以设置操作的类型。

例如:

@BusinessLog(title = "系统用户_查询", opType = LogAnnotionOpTypeEnum.QUERY)
public ResponseData page(SysUserParam sysUserParam) {return new SuccessResponseData(sysUserService.page(sysUserParam));
}

#4. 系统监控

系统监控指对系统运行环境,在线用户,数据源管理的监控。通过监控页面可以实时看到系统运行的一些情况。

#4.1 服务监控

对服务器的运行状态,内存,虚拟机信息进行查看。

#4.2 在线用户

可以对当前系统的在线用户进行查看。还可以在线踢人。

#4.3 数据监控

这个页面是一个内嵌的iframe,引用的外部地址,所以要先看下菜单配置的这个url是否正确。

👉 检查一下这个外链地址,根据你的情况配置,如果是本机,就配置成http://localhost:82/druid/login.html

👉 点开之后,需要登录:

👉 账号密码,在开发管理->系统配置中进行设置,如下:

👉 可以看到,默认设置了空值(因为处于安全考虑),如果是空的话,会在系统启动时候,自动初始化一个随机的账号密码:

在这里可以看到账号和密码

#5. 通知公告

在线进行通知和公告的发布。

#5.1 通知公告

#5.1.1 新增通知和公告

发布公告时候,输入标题,类型,内容,选择收件人即可发起通知。

👉 通知和公告的区别,这里没有实际业务意义,只是一个标识。

 

#5.2 已收公告

发布公告给对应的人员后,可通过已收公告功能,查看已收的信息。

 

#6. 文件管理

文件管理菜单包含对系统内文件的查看,也可以在本页面上传文件。

#6.1 系统文件

系统文件包含了系统内所有的文件信息记录。针对已经上传的文件,可以进行下载,如果是图片类型,本页面还包含在线预览的功能。

👉 本系统的文件都存在sys_file_info表中,文件表中包含了文件id,文件大小,文件存储的位置和bucket等等。

👉 特地说一下,文件的存储位置,目前有4中,第一种是阿里云oss,第二个是腾讯云的cos,第三个是minio服务器,第四个是本地存储。

默认激活的是本地存储文件。

👉 bucket是抽象出的概念,其实就是文件夹的意思。

👉 下面分开说一下每种存储的用法和注意事项。

另外,文件存储的代码也都封装在roses-kernel包中,目的是为了给任何项目都可以用。

https://gitee.com/stylefeng-Roses/roses-kernel/tree/new-cloud/

#6.1.1 阿里云存储文件

阿里云存储文件需要先去阿里云申请key和secret(此处略)。

👉 pom中增加对阿里云oss的引用:

<!--阿里云和腾讯云oss-->
<dependency><groupId>cn.stylefeng.roses</groupId><artifactId>kernel-file</artifactId><version>3.0.4</version>
</dependency>
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version>
</dependency>

👉 之后在config包中增加oss的配置类。

/*** 阿里云的文件上传配置** @author fengshuonan* @date 2020/9/13 10:10*/
@Bean
public AliyunFileOperator fileOperator() {AliyunOssProperties aliyunOssProperties = new AliyunOssProperties();aliyunOssProperties.setAccessKeyId("xxxx");aliyunOssProperties.setAccessKeySecret("xxxx");return new AliyunFileOperator(aliyunOssProperties);
}

👉 系统默认激活的是本地存储,启动其他存储方式,先把FileConfig中的其他FileOperator删除掉。

👉 之后就可以用FileOperator类的接口进行文件操作了。

#6.1.2 腾讯云cos

👉 第一步先pom加引用:

<!--阿里云和腾讯云oss-->
<dependency><groupId>cn.stylefeng.roses</groupId><artifactId>kernel-file</artifactId><version>3.0.4</version>
</dependency>
<dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.23</version>
</dependency>

👉 第二步增加Configuration配置:

/*** 腾讯云文件配置** @author fengshuonan* @date 2020/9/13 10:23*/
@Bean
public TenFileOperator fileOperator() {TenCosProperties tenCosProperties = new TenCosProperties();tenCosProperties.setSecretId("xxxx");tenCosProperties.setSecretKey("xxxx");return new TenFileOperator(tenCosProperties);
}

#6.1.2 minio

暂无封装

#6.1.3 本地文件

系统默认激活的是本地文件上传,可以在FileConfig中查看配置。

/*** 本地文件操作客户端** @author stylefeng* @date 2020/6/9 21:39*/
@Bean
public FileOperator fileOperator() {LocalFileProperties localFileProperties = new LocalFileProperties();String fileUploadPathForWindows = ConstantContextHolder.getDefaultFileUploadPathForWindows();if (ObjectUtil.isNotEmpty(fileUploadPathForWindows)) {localFileProperties.setLocalFileSavePathWin(fileUploadPathForWindows);}String fileUploadPathForLinux = ConstantContextHolder.getDefaultFileUploadPathForLinux();if (ObjectUtil.isNotEmpty(fileUploadPathForLinux)) {localFileProperties.setLocalFileSavePathLinux(fileUploadPathForLinux);}return new LocalFileOperator(localFileProperties);
}

#6.2 上传文件

👉 上传文件的操作可以在SysFileInfoController控制器中找到相关的代码。

在业务中若需要使用文件上传功能,一般都先用通用的上传文件接口/sysFileInfo/upload,调用上传文件接口上传后,会返回给你一个文件id,也就是sys_file_info表的主键id

之后,在你的业务表中加一个文件id字段维护这个文件就可以了。

/sysFileInfo/upload这个接口的核心业务只有两个,第一个是调用fileOperator进行文件上传,第二个是把文件信息存入sys_file_info表中。

#7 定时任务

定时任务采用了hutool的定时任务工具类。

#7.1 新建定时任务

新增定时任务前,需要先创建定时任务类。

👉 定时任务类需要遵循一定的规范,也就是实现TimerTaskRunner接口,并且需要把这个类装配到spring容器中。

例如,下边就是一个标准的定时任务类:

import cn.stylefeng.guns.core.timer.TimerTaskRunner;
import org.springframework.stereotype.Component;/*** 这是一个定时任务的示例程序** @author stylefeng* @date 2020/6/30 22:09*/
@Component
public class SystemOutTaskRunner implements TimerTaskRunner {@Overridepublic void action() {System.out.println("一直往南方开!一直往南方开!");}}

👉 创建完定时任务类之后,就可以在界面上添加定时任务类了。

添加定时任务需要遵守以下几个规范:

👉 任务class类名直接下拉选,系统初始化的时候会读取所有TimerTaskRunner的实现类。

👉 任务表达式是5-7端的cron表达式,可以使用这个工具生成https://cron.qqe2.com/


http://chatgpt.dhexx.cn/article/4iQumdgl.shtml

相关文章

如何让应用保持后台运行,做到保活?

其实&#xff0c;我们无法做到真正意义上的保活&#xff0c;应为系统进程会自动杀死占用过大内存的某个应用。 但我们还有一种选择&#xff0c;就是过滤该应用的包名&#xff0c;做到后台任务键清理不掉它&#xff0c;单独去除不掉它&#xff0c;只有返回键才能做到真正的退出…

【已解决】Android 如何让应用在后台运行

应用在后台跑&#xff0c;这种说法可能不够准确&#xff0c;就是说应用没有finish退出&#xff0c;但也不在前台的状态&#xff0c;例如应用执行中点击了home键一样。如何实现呢&#xff1f; 要点&#xff1a; 退回后台是执行了home键&#xff0c;activity分别执行了onPause和…

如何让安卓APP一直在后台运行?

本文摘自微信公众号“android高心星的私塾” 一 声明 1 网上很多的保活手段&#xff0c;但是不靠谱的居多 2 本文只是进行保活知识的推广&#xff0c;不是在教你做永生不死的进程 二 保活手段 1 业界保活手段&#xff1a;黑色保活&#xff0c;灰色保活&#xff0c;白色保活 2…

Android | 判断App处于前台还是后台的方案

很多场景下&#xff0c;都需要判断某个App处于前台还是后台。本文集网上编写的前台判断方案于一体。 目前&#xff0c;有6种方案&#xff1a; 方 法 判断原理需要权限可以判断其他应用位于前台特点①RunningTask否Andorid4.0系列可以&#xff0c;5.0以上机器不行Android5.0此方…

fastapi_No.18_后台应用

文章目录 简介使用场景 创建后台应用步骤第一步&#xff1a;定义后台应用函数第二步&#xff1a;使用后台应用函数 在依赖项中的后台应用示例代码示例代码说明 简介 后台应用就是在发送响应后运行的函数。通常用在请求后需要耗费较长时间处理&#xff0c;且客户端不需要在接收…

win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法

我在使用Win11系统的电脑时经常会遇到自动打开应用程序情况&#xff0c;很多小伙伴都不知道到如何关闭&#xff0c;那么遇到这种情况应该要如何解决呢?下面就和小编一起来看看Win11系统要如何去禁用软件的后台权限吧。更多windows11系统教程&#xff0c;可以参考小白一键重装网…

提高软件CPU占用率

案例&#xff1a; 独立线程以5ms一包的速率接收指令&#xff08;一共大概70-80种指令类型&#xff09;&#xff0c;并放入一个队列A 主线程中&#xff0c;根据定时器去队列A中取数据&#xff0c;并解析/计算/显示&#xff08;速率&#xff1a;200包/秒&#xff09; 现象&…

CPU使用率100%,如何解决

文章目录 CPU使用率概念CPU使用率的重要指标计算公式 查看CPU使用率CPU 使用率过高总结 CPU使用率 概念 单位时间内CPU使用情况的统计&#xff0c;以百分比方式显示 Linux是一个多任务操作系统&#xff0c;将每个CPU的时间划分为很短的时间片&#xff0c;通过调度器轮流分配…

解决 服务器cpu使用率100%,变成矿鸡之我与病毒crypto斗智斗勇,宝塔面板cpu使用率100%爆红

关于 简单解决宝塔面板显示CPU使用率 100%&#xff0c;但top却没找到相关进程这件事&#xff01;&#xff01;&#xff01; 如图&#xff1a; 作为一个小白&#xff0c;我只是想简单的搭建一个个人网站&#xff0c;结果碰到这个闹心的事。 服务器: 阿里云服务器 面板&#xff…

linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化

今天使用 MobaXterml 连接上一台物联网的Linux服务器的使用&#xff0c;发现该服务器的CPU使用率一直在100%左右。 使用top 命令发现Mysql占用了大量的CPU 用数据库工具 Navicat premium 以 root 的身份连接数据库&#xff0c;执行查询语句&#xff1a; show PROCESSLIST; 发现…

CPU使用率到100%,有哪些因素影响?

关注星标公众号&#xff0c;不错过精彩内容 转自 | 涛哥依旧 最近&#xff0c;一位同事急匆匆跑过来跟我说&#xff1a;糟糕了&#xff0c;服务器CPU的使用率达100%了。 我心想不可能啊&#xff0c;CPU有那么多核&#xff0c;怎会跑满&#xff1f;于是看了一眼&#xff0c;结果…

记一次golang cpu 占用100%

最近重新部署了下测试服务器&#xff0c;发现其负载达到了4.*&#xff0c; cpu 使用率达到了100%&#xff0c;吓的瑟瑟发抖&#xff0c;马上起来查看情况。 1&#xff0c; 想到了使用go性能查看工具&#xff1a; pprof&#xff0c;因为项目是用gin开发的&#xff0c;所在直接安…

Mysql CPU占用100%查询

这几天每天都会收到服务器负载报警&#xff0c;抽出时间查看一下原因。 进入到服务器使用top命令查看&#xff1a; 能够看到是mysql常年霸居榜首&#xff0c;导致服务器负载变高。理论上来讲&#xff0c;数据量没有那么大&#xff0c;因为很多数据都是没用的&#xff0c;前一段…

【故障排查】如何排查CPU占用100%

线上后台报警CPU占用100%&#xff0c;CPU占用过高&#xff0c;本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令&#xff0c;找到占用CPU最高的进程。按ShiftP键排序&#xff1a; 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案

0x00 问题场景 1. 环境配置 角色版本位数备注虚拟机软件VMware Workstation15\原始版本12&#xff0c;升到15Host OSWindows 7 Professional6.1.7601, Service Pack 164-bit\Guest OSWindows XPservice Pack 332 bit\ 2. 环境说明 VMware在很久以前是version12&#xff0c;…

Win10环境VMware开WinXP虚拟机CPU占用100%

解决办法 网上试了各种方法&#xff0c;还是不太行&#xff0c;最后莫名其妙的好了。而这之前我只做了一件事&#xff0c;在windows的功能里打开hyper-V服务。 后续 某一天&#xff0c;windows系统自动更新了&#xff0c;然后本来运行得好好的win xp虚拟机变得巨卡。我在w…

IDEACPU占用100%_卡顿 解决办法

解决IDEA占用CPU100%的问题 直接上答案为什么会占用CPU如何查找占用CPU的原因 直接上答案 绝大部分的原因是你打开了一个有非常非常多的代码的类&#xff0c;并且你并不编辑这个类&#xff0c;你只是打开了。。。 当然&#xff0c;如果不是这样&#xff0c;你才能去排查是不是…

linux的cpu使用率100%?

1&#xff1a;背景 在linux环境中&#xff0c;我们都会通过top指令获取当前实例的进场占用cpu情况&#xff0c;如下所示 [123456789root ~]$ top top - 11:48:13 up 622 days, 15:51, 2 users, load average: 0.22, 0.19, 0.11 Tasks: 788 total, 1 running, 787 sleepin…

【最实用实战】如何排查CPU占用100%

线上后台报警CPU占用100%&#xff0c;CPU占用过高&#xff0c;本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令&#xff0c;找到占用CPU最高的进程。按ShiftP键排序&#xff1a; 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

虚拟机CPU占用100%问题记录

项目场景 kswapd0占用CPU过高&#xff0c;严重影响服务器及虚拟机的使用。 原因分析 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。 系统物理内存不足时&#xff0c;kswapd0 会频繁的进行换页操作&#xff08;使用swap分区与内存换页操作交换数据&#xff09;&…