开箱即用的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 支持一下!


更多推荐