开箱即用的SpringBoot+JavaFX脚手架
开箱即用的SpringBoot+JavaFX脚手架
本文推荐一个开源的 JavaFX + Spring Boot 企业级桌面应用脚手架,集成权限管理、Selenium自动化、操作日志、全局异常处理等功能,5分钟快速启动,让你专注业务逻辑,不用再重复造轮子。
🎯 为什么我要做这个项目?
做了快7年的Java应用开发,我发现一个很尴尬的现状:
Web开发有 Spring Boot、有各种脚手架,5分钟就能起一个项目;但桌面开发呢?每次都要从零开始搭架子。
每次接到新的桌面应用需求,我都要重复做这些事情:
- 🔌 整合 JavaFX 和 Spring 上下文,处理启动生命周期
- 👤 写用户登录、权限管理,又是用户表又是角色表
- 📝 做操作日志,AOP切面、异步存储、日志查询
- ❌ 全局异常处理,错误提示怎么弹才友好
- 🛠️ 封装各种工具类:日期、字符串、文件、Excel…
- 🎨 调UI样式,怎么才能看起来不那么"土"
同样的代码写了一遍又一遍,真正的业务逻辑却没写多少。
于是我决定把这些年做过的项目抽取出一个通用脚手架——JavaFX Boot Scaffold,把企业级桌面应用必备的功能都集成好,拿来就能用。
✨ 核心特性
1. 完整的权限管理系统
这应该是企业级应用的标配了。我实现了 用户-角色-权限 三级权限模型:
用户 → 角色 → 权限(菜单级 + 按钮级)
↓ ↓
多对多 多对多
- ✅ 用户管理:增删改查、启用禁用、密码重置
- ✅ 角色管理:角色定义、权限分配
- ✅ 权限管理:菜单权限、按钮级细粒度控制
- ✅ JWT Token 认证:可配置过期时间
- ✅ 登录认证:可一键开启/关闭登录验证
2. Selenium 自动化集成
很多桌面应用都需要和浏览器交互,我把 Selenium 也集成进去了:
- ✅ 内置 WebDriver 自动管理,不用手动下载驱动
- ✅ 封装了常用的浏览器操作方法
- ✅ 支持 Chrome/Firefox/Edge 多浏览器
- ✅ 页面元素等待、截图、表单自动填写
- ✅ 可用于自动化测试、数据采集、批量操作等场景
3. 操作日志记录
基于 Spring AOP 实现的操作日志系统:
// 一个注解搞定日志记录
@Log(title = "用户管理", businessType = BusinessType.INSERT)
public void addUser(User user) {
// ...
}
- ✅
@Log注解,一行代码接入 - ✅ 异步保存日志,不影响主流程性能
- ✅ 记录操作人、操作时间、操作内容、请求参数
- ✅ 日志查询界面,支持按时间、类型筛选
4. 全局异常处理
再也不用到处 try-catch 了:
- ✅ 统一异常拦截,业务异常 / 系统异常分类处理
- ✅ 友好的错误提示弹窗,不暴露堆栈信息给用户
- ✅ 异常日志完整记录,方便排查问题
- ✅ 支持自定义业务异常码
5. 丰富的工具类库
封装了日常开发最常用的 10+ 工具类:
| 工具类 | 功能说明 |
|---|---|
DateUtils |
日期时间处理、格式化、计算 |
StringUtils |
字符串处理、判空、脱敏 |
FileUtils |
文件读写、复制、删除、下载 |
HttpUtils |
HTTP 请求封装,GET/POST/PUT/DELETE |
JsonUtils |
JSON 序列化/反序列化 |
ExcelUtils |
Excel 导入导出,基于 EasyExcel |
SeleniumUtils |
Selenium 浏览器操作封装 |
MD5Utils |
加密解密工具 |
IpUtils |
IP地址获取与解析 |
6. 现代化 UI 设计
别再用 Swing 那种老掉牙的界面了!JavaFX + Bootstrap 风格 CSS,界面清爽现代:
- ✅ Bootstrap 风格的扁平化设计
- ✅ 统一的配色和字体规范
- ✅ 登录页、主界面、列表页、表单页 全套模板
- ✅ 支持自定义主题色(后续版本支持)
🏗️ 技术架构
技术栈一览
| 层级 | 技术选型 | 版本 | 说明 |
|---|---|---|---|
| 语言 | Java | JDK 1.8+ | 兼容主流生产环境 |
| UI框架 | JavaFX | 8+ | Oracle 官方推荐 GUI 框架 |
| 后端框架 | Spring Boot | 2.x | 自动配置、快速开发 |
| ORM框架 | MyBatis Plus | 3.x | 增强版 MyBatis,写代码更快 |
| 数据库 | MySQL | 5.7+ / 8.0+ | 企业级首选数据库 |
| 构建工具 | Maven | 3.6+ | 依赖管理与打包 |
| 认证 | JWT | - | 无状态 Token 认证 |
| AOP | Spring AOP | - | 日志、异常等切面 |
| 自动化 | Selenium | - | 浏览器自动化操作 |
项目架构图
┌─────────────────────────────────────────────────────────┐
│ JavaFX UI 层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 登录页 │ │ 主界面 │ │ 用户管理│ │ 角色权限│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ ↓ FXML + Controller │
├─────────────────────────────────────────────────────────┤
│ Spring 核心层 │
│ ┌───────────────────────────────────────────────────┐ │
│ │ Spring 容器 / IOC / AOP / 事件机制 │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Service │ │ Mapper │ │ 实体类 │ │ 工具类 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
├─────────────────────────────────────────────────────────┤
│ 数据访问层 │
│ ┌───────────────────────────────────────────────────┐ │
│ │ MyBatis Plus │ MySQL │ 连接池 │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
📁 项目结构
javafx-boot-scaffold/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── io/javafxboot/
│ │ │ ├── JavaFxBootApplication.java # 启动类
│ │ │ ├── annotation/ # 自定义注解
│ │ │ │ └── Log.java # @Log 操作日志注解
│ │ │ ├── aspect/ # AOP切面
│ │ │ │ └── LogAspect.java # 操作日志切面
│ │ │ ├── config/ # 配置类
│ │ │ │ ├── SecurityConfig.java # 安全配置
│ │ │ │ ├── SeleniumConfig.java # Selenium配置
│ │ │ │ └── SwaggerConfig.java # 接口文档配置
│ │ │ ├── ctrl/ # 控制器(MVP模式)
│ │ │ │ ├── LoginCtrl.java # 登录控制器
│ │ │ │ └── MainCtrl.java # 主界面控制器
│ │ │ ├── entity/ # 实体类
│ │ │ │ ├── User.java # 用户实体
│ │ │ │ ├── Role.java # 角色实体
│ │ │ │ ├── Permission.java # 权限实体
│ │ │ │ └── OperLog.java # 操作日志实体
│ │ │ ├── exception/ # 异常处理
│ │ │ │ ├── BusinessException.java # 业务异常
│ │ │ │ └── GlobalExceptionHandler.java # 全局异常处理器
│ │ │ ├── mapper/ # MyBatis Mapper
│ │ │ ├── service/ # 业务服务层
│ │ │ │ ├── impl/ # 服务实现
│ │ │ │ ├── UserService.java
│ │ │ │ ├── RoleService.java
│ │ │ │ └── ...
│ │ │ ├── util/ # 工具类
│ │ │ │ ├── selenium/ # Selenium 工具
│ │ │ │ ├── DateUtils.java
│ │ │ │ ├── StringUtils.java
│ │ │ │ └── ...
│ │ │ └── view/ # 视图类(JavaFX View)
│ │ │ ├── LoginView.java
│ │ │ └── MainView.java
│ │ └── resources/
│ │ ├── application.yml # 应用配置
│ │ ├── db/ # 数据库脚本
│ │ │ └── schema.sql # 表结构初始化
│ │ ├── fxml/ # FXML 界面文件
│ │ ├── css/ # CSS 样式
│ │ └── icon/ # 应用图标
│ └── test/ # 测试代码
├── pom.xml # Maven 配置
└── README.md # 项目说明
代码分层清晰,注释完善,新手也能快速上手。
🚀 快速上手,5分钟启动
环境准备
- JDK 1.8 或更高版本
- Maven 3.6+
- MySQL 5.7+ 或 MySQL 8.0+
- Chrome/Firefox/Edge 浏览器(Selenium需要,不用可以忽略)
步骤1:克隆项目
git clone https://gitee.com/zhbdream/javafx-boot-scaffold.git
cd javafx-boot-scaffold
步骤2:初始化数据库
执行 src/main/resources/db/schema.sql 脚本,自动创建所有数据表和初始数据。
-- 默认管理员账号
-- 用户名: admin
-- 密码: admin123
步骤3:修改配置
编辑 application.yml,配置数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/javafx_boot?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: your_password # 修改为你的数据库密码
步骤4:编译运行
# 方式一:Maven 命令运行
mvn clean compile
mvn javafx:run
# 方式二:直接运行启动类
# 运行 JavaFxBootApplication.main() 方法
启动完成后,就可以看到登录界面了!🎉
💡 使用示例
示例1:创建一个新的业务模块
假设你要做一个"客户管理"功能,步骤如下:
Step 1:创建实体类
@TableName("customer")
public class Customer extends BaseEntity {
private String name;
private String phone;
private String email;
// getter/setter...
}
Step 2:创建 Mapper
public interface CustomerMapper extends BaseMapper<Customer> {
// 继承 BaseMapper,基础CRUD自动拥有
}
Step 3:创建 Service
@Service
public class CustomerService extends ServiceImpl<CustomerMapper, Customer> {
// 业务逻辑写这里
}
Step 4:创建 View + Ctrl
// View 层 - 负责界面展示
public class CustomerView extends BaseView {
// FXML 绑定
@FXML
private TableView<Customer> customerTable;
// ...
}
// Controller 层 - 负责业务逻辑
public class CustomerCtrl {
@Autowired
private CustomerService customerService;
// ...
}
就是这么简单!基础的增删改查,加上界面,半天就能搞定。
示例2:添加操作日志
@Log(title = "客户管理", businessType = BusinessType.INSERT)
public void addCustomer(Customer customer) {
customerService.save(customer);
}
一个 @Log 注解搞定,用户操作记录自动存入数据库,支持查询和导出。
示例3:使用 Selenium 自动化
@Autowired
private SeleniumUtils seleniumUtils;
public void autoLoginWebsite() {
// 打开浏览器
seleniumUtils.openBrowser("https://example.com/login");
// 自动填写表单
seleniumUtils.sendKeysById("username", "admin");
seleniumUtils.sendKeysById("password", "123456");
// 点击登录
seleniumUtils.clickById("loginBtn");
// 等待页面加载
seleniumUtils.waitForPageLoad();
// 截图保存
seleniumUtils.takeScreenshot("d:/screenshot.png");
}
🎯 适用场景
这个脚手架适合做什么?
| 场景 | 说明 |
|---|---|
| 🏢 企业内部管理工具 | 数据管理、报表工具、运维工具 |
| 🤖 自动化工具 | 基于 Selenium 的网页自动化、数据采集 |
| 📊 数据可视化桌面端 | 本地数据分析、图表展示工具 |
| 📚 学习 JavaFX 开发 | 代码规范、结构清晰,适合入门学习 |
| 🛠️ 快速原型验证 | 有想法需要快速做个桌面 Demo |
| 💼 外包项目基础框架 | 接私活、做项目的快速起步模板 |
📦 打包部署
打包为 JAR 文件
mvn clean package
打包为 Windows 可执行文件
mvn javafx:jfxnative
打包后的安装包位于 target/jfx/native/ 目录下。
打包为跨平台镜像
使用 jlink 生成自定义 JRE 镜像,用户不需要安装 JDK 也能运行:
mvn javafx:jlink
🔮 后续规划
这个项目还在持续更新中,目前规划的功能:
- 🏷️ 多主题支持:明亮主题、暗黑主题一键切换
- 🌐 国际化:中文/英文多语言支持
- 🔌 插件机制:支持第三方插件扩展
- 📊 图表组件:ECharts 集成,数据可视化
- 💾 本地数据库:支持 SQLite,无需安装 MySQL
- 🔄 自动更新:客户端版本自动检测与升级
- 📝 代码生成器:根据表结构一键生成 CRUD 代码
🤝 参与开源
项目是完全开源的,欢迎大家来玩:
- 🏠 Gitee 地址:https://gitee.com/zhbdream/javafx-boot-scaffold
- ⭐ Star 支持:觉得有用麻烦点个 Star,这是对我最大的鼓励
- 🐛 提 Issue:发现 Bug 或者有功能建议,欢迎提 Issue
- 🔧 提交 PR:欢迎提交代码,一起完善这个项目
- 💬 交流讨论:有任何问题都可以在评论区交流
📝 写在最后
做 Java 桌面开发的这些年,经常听到有人说 “JavaFX 凉了”、“桌面开发没前途了”。但实际工作中我发现,很多场景下桌面应用依然是不可替代的——比如需要离线运行、需要高性能、需要和本地系统深度交互、需要数据本地化等等。
JavaFX 作为 Oracle 官方主推的 GUI 框架,其实一直在进步,配合 Spring Boot 的强大生态,开发效率一点不比 Web 慢。
我做这个脚手架的初衷,就是希望能让更多 Java 开发者快速上手桌面应用开发,把时间花在真正的业务逻辑上,而不是重复造轮子。
如果你也在做 Java 桌面开发,或者有这方面的需求,欢迎来体验一下这个项目,相信能帮到你。
愿每一个 Java 桌面开发者,都能少加班,多摸鱼。 😄
🔗 项目地址:https://gitee.com/zhbdream/javafx-boot-scaffold
⭐ 如果觉得不错,别忘了点个 Star 支持一下!
更多推荐

所有评论(0)