用React给XXL-JOB开发一个新皮肤(一):环境搭建和项目初始化
目录
- 一. 简述
- 二. Fork 项目
- 三. 搭建开发环境
- 四. 初始化皮肤项目
- 五. 添加相关依赖
- 六. 预览
一. 简述
大名鼎鼎的 xxl-job 任务调度中心我们应该都使用过,项目地址:xxl-job。它是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

该项目中的页面是使用freemarker做页面渲染的。这里我们使用 React和Antd的技术栈实现一个管理平台的新皮肤。接下来跟着我一步步实现这个新皮肤吧!
二. Fork 项目
这里我们可以在码云上将 xxl-job 项目 fork 到自己的仓库。这里使用的是最新的分支 2.4.0;从这个分支作为分支起点,如下图:

三. 搭建开发环境
接下来我们先搭建一个 xxl-job 的开发环境。这里我们需要现在项目根目录创建一个 log目录(用来存放运行的日志文件)。这里我们需要修改下面几个文件:
doc/db/tables_xxl_job.sql:建表语句,在自己的数据库上执行该SQLxxl-job-admin/src/main/resources/application.properties:需要修改数据库文件### xxl-job, datasource 修改自己数据库地址 spring.datasource.url=jdbc:mysql://192.168.110.107:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverxxl-job-admin/src/main/resources/logback.xml:修改存放日志路径<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="1 seconds"><contextName>logback</contextName><property name="log.path" value="./log/xxl-job-admin.log"/><!-- 忽略其他部分 --> </configuration>xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml:修改存放日志路径<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="1 seconds"><contextName>logback</contextName><property name="log.path" value="./log/xxl-job-executor-sample-springboot.log"/><!-- 忽略其他部分 --> </configuration>
接下来分别启动,xxl-job-admin的启动类和 xxl-job-executor-sample的 springboot 模块。

接着我们访问:http://localhost:8080/xxl-job-admin。输入账号:admin密码:123456。

这样开发环境就搞定了,这下来我们开始初始化皮肤的项目。
四. 初始化皮肤项目
这里我们在项目根目录中创建 xxl-job-web 目录,用来存放前端项目。

这里我们使用 vite 来初始化项目。选择 React 框架和 TS,创建完成执行执行 yarn install 安装依赖。

五. 添加相关依赖
这里添加我们需要的依赖,使用的依赖如下:
| 依赖 | 版本 | 描述 |
|---|---|---|
| antd | 5.2.6 | 前端 UI 组件库 |
| axios | 1.6.5 | HTTP 请求库 |
| @ant-design/icons | 5.2.6 | 图标库 |
| @ant-design/charts | 2.0.3 | charts 库 |
| ahooks | 3.7.8 | hooks工具库 |
| less | 4.2.0 | css 预处理库 |
| less-loader | 11.1.4 | webpack 构建处理 less 库 |
| react-router-dom | 6.21.1 | 前端路由库 |
| zustand | 4.4.7 | 简单好用的状态管理库 |
| @emotion/react | 11.11.3 | React 组件中样式的处理和管理功能库 |
| @emotion/styled | 11.11.0 | 提供了一种创建样式化组件的方式的库 |
这里 package.json如下:
{"name": "xxl-job-web","description": "xxl-job新皮肤","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite","build": "tsc && vite build","lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0","preview": "vite preview"},"dependencies": {"@ant-design/charts": "^2.0.3","@ant-design/icons": "^5.2.6","@emotion/react": "^11.11.3","@emotion/styled": "^11.11.0","ahooks": "^3.7.8","antd": "^5.12.8","axios": "^1.6.5","less": "^4.2.0","less-loader": "^11.1.4","react": "^18.2.0","react-dom": "^18.2.0","react-router-dom": "^6.21.1","zustand": "^4.4.7"},"devDependencies": {"@types/node": "^20.10.7","@types/react": "^18.2.43","@types/react-dom": "^18.2.17","@types/react-router-dom": "^5.3.3","@typescript-eslint/eslint-plugin": "^6.14.0","@typescript-eslint/parser": "^6.14.0","@vitejs/plugin-react": "^4.2.1","eslint": "^8.55.0","eslint-plugin-react-hooks": "^4.6.0","eslint-plugin-react-refresh": "^0.4.5","typescript": "^5.2.2","vite": "^5.0.8"}
}
六. 预览
这里我们将vite 初始化的文件整理下,移除一些不需要的文件。仅留下 App.tsx和 main.tsx 文件。

这里我们在 index.html文件中修改 title 标签内容。
<!doctype html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>任务调度中心</title></head><body><div id="root"></div><script type="module" src="/src/main.tsx"></script></body>
</html>
将 main.tsx 文件修改为如下:
import React from 'react'
import ReactDOM from 'react-dom/client'
import Application from './App.tsx'ReactDOM.createRoot(document.getElementById('root')!).render(<React.StrictMode><Application /></React.StrictMode>,
)
将 App.tsx 文件修改为如下:
const Application = () => <h1>任务调度中心</h1>export default Application
接着我们启动项目:yarn dev

好了,现在我们项目已经初始化完成,下一篇文章将介绍配置 vite、规划项目目录、配置路由。
相关文章:
用React给XXL-JOB开发一个新皮肤(一):环境搭建和项目初始化
目录 一. 简述二. Fork 项目三. 搭建开发环境四. 初始化皮肤项目五. 添加相关依赖六. 预览 一. 简述 大名鼎鼎的 xxl-job 任务调度中心我们应该都使用过,项目地址:xxl-job。它是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单…...
华为常用的命令——display,记得点赞收藏!
华为设备提供了多条display命令用于查看硬件部件、接口及软件的状态信息。通常这些状态信息可以为用户故障处理提供定位思路。 常用的故障信息搜集的命令如下: 路由器常用维护命令表 交换机常用的故障信息搜集 关注 工 仲 好:IT运维大本营,获…...
Costco攻入山姆大本营
01 Costco深圳店开业火爆 “我今天不去Costco,早上还没开业,路上就已经堵车了,看来今天人很多,过几天再去”,原本计划在Costco开业当天去逛逛的张芸(化名)无奈只能放弃。 家住在Costco深圳店旁…...
什么是常量?如何区分常量和变量?
一、问题 什么是常量,什么是变量?怎样区分⼆者? 二、解答 1. 常量与变量 (1)常量即其值在程序运⾏的过程中是不可以改变的,如123,-4567 为数值常量; (2)变量…...
uniapp返回上一页并刷新数据
在uniapp中,返回页面时onLoad是不会触发的 如果只需要在特定情况下返回上一页才需要刷新数据 可以使用$emit和$no去解决 例如:注册完成后返回到首页并隐藏注册按钮,register.vue和index.vue register.vue <template><view clic…...
LeetCode 0083.删除排序链表中的重复元素:模拟
【LetMeFly】83.删除排序链表中的重复元素:模拟 力扣题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的…...
Javaweb之SpringBootWeb案例新增部门的详细解析
2.3 删除部门 查询部门的功能我们搞定了,下面我们开始完成删除部门的功能开发。 2.3.1 需求 点击部门列表后面操作栏的 "删除" 按钮,就可以删除该部门信息。 此时,前端只需要给服务端传递一个ID参数就可以了。 我们从接口文档中也…...
基于微信小程序的音乐平台 开源项目
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台,包含了音乐…...
uniapp 微信小程序跳转外部链接
一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…...
【STM32】FLASH闪存
1 FLASH闪存简介 本节所指STM32内部闪存,即下载程序的时候,程序存储的地方。(非易失性) STM32F1系列的FLASH包含程序存储器、系统存储器(bootloader,不允许修改)和选项字节三个部分࿰…...
滴水内存地址堆栈
两个十六进制数 刚好是一个字节刚好 DC这的一个字节数据为E4 一个内存地址 后面表示四个字节的数据 所以有八个十六进制的数 BASE是高地址 所以放入一个四字节后就 -4...
Laravel中的lockForUpdate悲观锁
lockForUpdate 是悲观锁,测试就不写了 注意的事项 lockForUpdate 必须在事务中lockForUpdate 被阻塞的查询必须是同样添加了lockForUpdate的语句查询语句走索引,则使用行锁,否则使用表锁 现在举例说明第一项和第二项 开启事务并添加锁 pub…...
BikeDNA(八)外在分析:OSM 与参考数据的比较2
BikeDNA(八)外在分析:OSM 与参考数据的比较2 1.数据完整性 见链接 2.网络拓扑结构 见链接 3.网络组件 本节仔细研究两个数据集的网络组件特征。 断开连接的组件不共享任何元素(节点/边)。 换句话说,…...
28 星际旋转
效果演示 实现了一个太阳系动画,其中包括了地球、火星、金星、土星、水星、天王星、海王星以及火卫二号等行星的动画效果。太阳系的行星都被放在一个固定的容器中,并使用CSS动画来实现旋转和移动的效果。当太阳系的行星绕着太阳运行时,它们会…...
测试人员必备基本功(3)
容易被忽视的bug 第三章 查询列表容易被忽视的bug 文章目录 容易被忽视的bug第三章 查询列表容易被忽视的bug 前言1.查询角色2.接口设计 三、测试设计1.测试点2.容易发现bug的测试点如下: 总结 前言 一个WEB系统的所有功能模块,其实都是围绕“增、删、…...
记一次数据修复,需要生成十万条sql进行数据回滚
一、背景 数据回滚 二、难点 2.1 需要处理的数据涉及多达数万个用户,每个用户涉及的表达到10个 2.2 时间紧急,需要快速回滚,数据需要完整 2.3 数据存在重复或空缺问题 三、解决方案 3.1 数据多,使用分批处理,把大任务分割成若…...
[paddle]paddlehub部署paddleocr的hubserving服务
步骤如下: 第一步:首先需要安装好paddleocr环境已经paddlehub环境 第二步:下载paddleocr源码: git clone https://github.com/PaddlePaddle/PaddleOCR.git 然后切换到paddocr目录执行 新建个文件夹叫Inference把paddleocr模型…...
2024校招,网易互娱游戏测试工程师一面
前言 大家好,今天回顾一下,我前段时间参加的游戏测试工程师技术面试 两个面试官,一个提问,另一个负责记录 过程 自我介绍比赛经历介绍一下使用的博弈算法穷举算法对性能有什么影响怎么评估局面好坏出现的bug怎么解决的&#x…...
Linux Ubuntu搭建我的世界Minecraft服务器实现好友远程联机MC游戏
文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 Li…...
Springboot对接ceph集群以及java利用s3对象网关接口与ceph集群交互
springboot中引入相关依赖 <dependency><groupId>software.amazon.awssdk</groupId><artifactId>regions</artifactId><version>2.22.13</version></dependency><dependency><groupId>software.amazon.awssdk<…...
高效安全备份QQ空间历史说说:GetQzonehistory全方位使用指南
高效安全备份QQ空间历史说说:GetQzonehistory全方位使用指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 功能价值:为什么选择GetQzonehistory? …...
汉字拼音转换工具选型与实战指南:用pinyinjs解决多场景字符处理难题
汉字拼音转换工具选型与实战指南:用pinyinjs解决多场景字符处理难题 【免费下载链接】pinyinjs 一个实现汉字与拼音互转的小巧web工具库,演示地址: 项目地址: https://gitcode.com/gh_mirrors/pi/pinyinjs 在数字化产品开发中…...
用2万小时人类视频预训练机器人,一场豪赌还是必经之路?
先说结论核心验证了“人类数据缩放定律”:在灵巧操作任务上,模型性能随人类预训练数据量对数线性增长,为数据策略提供了可预测的依据。成功的关键在于“两阶段迁移”设计:用大规模、廉价但“嘈杂”的人类数据奠基通用结构…...
通义千问多模态检索系统:图文视频混合输入全解析
通义千问多模态检索系统:图文视频混合输入全解析 1. 多模态检索的行业痛点与解决方案 在信息爆炸的时代,传统文本检索系统面临三大核心挑战: 跨模态匹配失效:用户用文字描述"红色跑车在沙漠驰骋",系统却返…...
利用快马平台快速生成javascript交互原型:以动态待办列表为例
利用快马平台快速生成JavaScript交互原型:以动态待办列表为例 最近在尝试快速验证一个待办事项应用的交互设计,发现用传统方式从零开始写代码太耗时了。正好试用了InsCode(快马)平台,只需要描述功能需求,就能自动生成可运行的Jav…...
别再只盯着采样率了!用STM32H723的ADC做高精度FFT分析,这些坑我帮你踩过了
STM32H723高精度FFT实战:从ADC采样到频谱分析的工程化实现 频谱分析在工业振动监测、音频处理、电力系统谐波检测等领域有着广泛应用。STM32H723系列凭借其高性能ADC和浮点运算单元,为嵌入式实时频谱分析提供了硬件基础。但实际工程中,从ADC…...
打破单模态壁垒:SillyTavern多模态交互功能深度解析
打破单模态壁垒:SillyTavern多模态交互功能深度解析 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 当你尝试向AI描述一幅复杂的场景,却发现文字难以捕捉光影的微妙…...
像素时装锻造坊企业落地:游戏公司美术部门像素资产标准化生产流程再造
像素时装锻造坊企业落地:游戏公司美术部门像素资产标准化生产流程再造 1. 项目背景与价值 在游戏美术制作领域,像素艺术资产的生产一直面临效率瓶颈。传统手工绘制方式需要美术师逐帧绘制,耗时耗力且难以保持风格统一。像素时装锻造坊(Pixe…...
淘宝任务自动化:让每天25分钟的重复操作变成5分钟的智能管理
淘宝任务自动化:让每天25分钟的重复操作变成5分钟的智能管理 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi …...
Pixel Fashion Atelier效果实测:在RTX 4090上单图生成耗时稳定在3.2秒内
Pixel Fashion Atelier效果实测:在RTX 4090上单图生成耗时稳定在3.2秒内 1. 测试环境与配置 1.1 硬件配置 本次测试使用的硬件平台为高端游戏工作站: 显卡:NVIDIA RTX 4090 (24GB GDDR6X)处理器:Intel i9-13900K内存ÿ…...
