bay1ts / eladmin

基于最新的Java 20和SpringBoot 3.1。根据eladmin项目进行改造。整合常用的Components.

Home Page:https://lwohvye.github.io/eladmin/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Chaste Unicorn Unicorn

AUR GitHub stars GitHub forks Dependency Review CodeQL Gradle Package

本项目在eladmin项目的基础上,进行了部分扩展及尝试,在此表示感谢。


启动类 AppRun.java 和配置文件 resources详见 unicorn-starter 模块。启停脚本

Java16之后,默认强封装JDK内部类,详见JEP 396 JEP 403,需在启动时添加相关参数开启包访问。较简单的是添加 --add-opens java.base/java.lang=ALL-UNNAMED ,也可根据需要缩小范围(在Java 9引入的JPMS/Jigsaw)。 详见:Java 16 Java 17

后台运行jar(开启远程调试端口5005)。2>&1 表示在同一个文件中同时捕获 System.err和 System.out(有一个箭头的表示以覆盖的方式重定向,而有两个箭头的表示以追加的方式重定向。如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如 2>&1 表示将标准错误输出转换为标准输出)。

nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar unicorn-starter-3.2.0.jar >nohup.out 2>&1 &

若外置依赖启动参数需添加,-Dloader.path=lib引入依赖。外置依赖可以大大减少jar包的体积。方便后续更新部署

#2.x版本启动示例
nohup java --add-opens java.base/java.lang=ALL-UNNAMED -Dloader.path=lib -jar eladmin-starter-2.6.18.jar >nohup.out 2>&1 &
#3.x版本开始,因为已完成JPMS改造,可移除启动参数中 --add-opens 部分
nohup java -XX:+UseZGC -Dloader.path=lib -jar unicorn-starter-3.2.0.jar >nohup.out 2>&1 &

引用方式 🎵

最新版本为: Maven Central

Maven

可根据需要选择版本

<!--2.6.18版本为springfox + 未进行动态权限改造-->
<!-- https://mvnrepository.com/artifact/com.lwohvye/eladmin -->
<dependency>
    <groupId>com.lwohvye</groupId>
    <artifactId>eladmin</artifactId>
    <version>2.6.18</version>
    <type>pom</type>
</dependency>
<!--3.x系列版本为springdoc + 动态权限改造 + JPMS部分改造-->
<dependency>
    <groupId>com.lwohvye</groupId>
    <artifactId>unicorn</artifactId>
    <version>3.2.0</version>
    <type>pom</type>
</dependency>
Gradle
ext { // 这个定义是可以传递的
    unicornVersion = '4.0.1-lambda'
}

implementation "com.lwohvye:unicorn-security:$unicornVersion"

// 引入滑动captcha
implementation("com.lwohvye:unicorn-security:$unicornVersion") {
    capabilities {
        requireCapability('com.lwohvye:unicorn-security-captcha')
    }
}
// 引入custom-log
implementation("com.lwohvye:unicorn-security:$unicornVersion") {
    capabilities {
        // 这里只支撑横线,不支持驼峰
        requireCapability('com.lwohvye:unicorn-security-business-log')
    }
}

项目简介

一个基于最新的Java 20 版本、 Spring Boot 3.1、 Jpa、 Spring Security、 Redis、ShardingSphere、RabbitMQ、Vue的前后端分离的系统。 在各模块基本解耦之后,可根据需要只引入部分模块实现相关职能。

项目源码

后端源码 前端源码
原项目-github https://github.com/elunez/eladmin https://github.com/elunez/eladmin-web
原项目-码云 https://gitee.com/elunez/eladmin https://gitee.com/elunez/eladmin-web
github https://github.com/lWoHvYe/eladmin https://github.com/lWoHvYe/eladmin-web

主要特性

  • 使用最新技术栈,社区资源丰富,基于Java 20、Spring Boot 3.1。(Support Virtual Threads/loom)
  • 基于注解的动态查询(Specification),可根据需要扩充查询注解。
  • 支持数据字典,可方便地对一些状态进行管理
  • 高效率开发,代码生成器可一键生成前后端代码
  • 支持接口级别的功能权限与数据权限,可自定义操作
  • 自定义权限注解与匿名接口注解,可快速对接口拦截与放行
  • 对一些常用前端组件封装:表格数据请求、数据字典等
  • 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断
  • 使用ShardingSphere实现多数据源和读写分离。该方式针对Mysql数据库。对系统侵入性小。(只需引入依赖,并在yaml中配置数据源信息即可)。
  • 另有TiDB分布式关系型数据库 方案,优于自行分库分表。
  • 整合Redisson拓展Redis的功能,读写分离
  • 整合消息队列RabbitMQ,实现消息通知、延迟消息,服务解耦。
  • 各模块独立,基本可插拔:若只需查询注解类基础功能,只需引入core模块即可,权限、日志、3rd Tools模块可插拔可独立部署, 除了传统To B业务,还可用于To C业务(see OAuth2.0 part

系统功能

  • 用户管理:提供用户的相关配置,新增用户后,默认密码为123456
  • 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限
  • 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单
  • 部门管理:可配置系统组织架构,树形表格展示
  • 岗位管理:配置各个部门的职位
  • 字典管理:可维护常用一些固定的数据,如:状态,性别等
  • 系统日志:记录用户操作日志与异常日志,方便开发人员定位排错
  • 定时任务:整合Quartz做定时任务,加入任务日志,任务运行情况一目了然
  • 代码生成:高灵活度生成前后端代码,减少大量重复的工作任务(逆向有很多方案,这种基于template的有一定的灵活性)
  • 邮件工具:配合富文本,发送html格式的邮件

项目结构

项目采用按功能分模块的开发方式,结构如下

  • unicorn-core 系统的核心模块,各种工具类,公共配置存在该模块

  • unicorn-sys-api Sys Module基础实体及API,方便服务拆分

  • unicorn-security 系统权限模块,包含权限配置管理等。

  • unicorn-logging 系统的日志模块,其他模块如果需要记录日志需要引入该模块

  • unicorn-tp-tools 第三方工具模块,包含:邮件、S3,可视情况引入

  • unicorn-code-gen 系统的代码生成模块。这部分待优化,亦非必须模块

  • unicorn-starter 启动类(Maven),项目入口,包含模块及组件配置(DB读写分离 + Cache读写分离)

  • valentine-starter 启动配置示例(Gradle),尝试Kotlin,试用TiDB

详细结构

- unicorn-core 公共模块
    - annotation 为系统自定义注解
    - aspect 自定义注解的切面
    - base 提供了Entity、Service、DTO基类和mapstruct的通用mapper
    - config 基础配置,Security配置,redis配置,openApi配置,Rsa配置等
        - security 权限控制,为swarm化,提供全局关闭Security功能
        - UnicornAutoConfiguration: 自动化装配
        - ValentineExecutorConfig: Running Spring Applications on Virtual Threads
    - exception 项目统一异常的处理
    - utils 系统通用工具类
- unicorn-sys-api 基础实体及DTO
    - modules 基础实体及接口定义
- unicorn-security 系统核心模块
	- common 配置跨域、静态资源、数据权限、DB Insert主键、实体表映射、系统完成入口
	    - init 容器启动后的钩子call back
	    - orm jpa-entity的部分配置,eg: Table Mapping
	    - web corsFilter configurer and so on
	- modules 系统相关模块(登录授权、消息队列、系统监控、定时任务、运维管理等)
	    - infrastructure business log相关
	    - quartz 定时任务
	    - rabbitmq 消息队列相关
	    - security 权限控制
	    - system 用户-权限管理
- unicorn-starter 系统启动入口。相关示例
- unicorn-logging 系统日志模块
- unicorn-tp-tools 系统第三方工具模块
- unicorn-code-gen 系统代码生成模块

运行环境

  • Java 20 基础运行环境
  • Mysql 5.7/8.0 数据库 读写分离/单数据源-通过配置数据源的方式切换
  • 拓展使用分布式关系型数据库 TiDB
  • Redis 6.0 缓存
  • RabbitMQ 发布-订阅(解耦、异步)
  • ELK 日志系统,若不需要可调整logback-spring.xml中的配置
  • 可基于docker 一键搭建。当然目录还是要自己建的,另外RabbitMQ记得装延迟插件,ES记得装IK
  • 若想搭建k8s版,可参照 ,这个是基于NFS挂载的。

特别鸣谢

  • JetBrains Logo (Main) logo

  • 感谢 JetBrains 提供的非商业开源软件开发授权。

  • 感谢 PanJiaChen 大佬提供的前端模板

  • 感谢 Moxun 大佬提供的前端 Curd 通用组件

  • 感谢 zhy6599 大佬提供的后端运维管理相关功能

  • 感谢 j.yao.SUSE 大佬提供的匿名接口与Redis限流等功能

  • 感谢 d15801543974 大佬提供的基于注解的通用查询方式

  • 感谢 elunez 大佬提供的eladmin项目


Feature list

  • dev_3.0 JPMS改造(3.0版本有做部分尝试,当前在IDEA中可开发调试,但模块化打包部署尚未以Named Module的方式运行, 推测是Spring Boot的 ClassLoader下全是Auto-Module)
  • Resource管理页面,delay
  • swarm化,可以参考why-swarm (已停工,后续计划接入OAuth2.0)

TODO

  • OAuth 2.0 (In Progress)
  • Loom + Kotlin Coroutines

About

基于最新的Java 20和SpringBoot 3.1。根据eladmin项目进行改造。整合常用的Components.

https://lwohvye.github.io/eladmin/

License:Apache License 2.0


Languages

Language:Java 82.3%Language:Kotlin 9.9%Language:PLpgSQL 4.7%Language:FreeMarker 2.1%Language:HTML 0.7%Language:Shell 0.2%Language:XSLT 0.1%