Giter Site home page Giter Site logo

tenght / eladmin Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lwohvye/unicorn

0.0 0.0 0.0 9.33 MB

基于最新的Java 17和SpringBoot 2.6.x。根据原eladmin项目进行改造。整合ELK、ShardingSphere读写分离、Redisson读写分离、消息队列等

License: Apache License 2.0

Shell 0.19% Java 93.56% PLpgSQL 3.93% FreeMarker 2.32%

eladmin's Introduction

EL-ADMIN 后台管理系统

AUR GitHub stars GitHub forks

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


本分支将停留在17版本,待22年底Spring 6.x Release后,试着整合。另将在dev_3.x分支,尝试后续版本的JDK

启动类 AppRun.java 和配置文件 resources 详见 eladmin-starter 模块。启停脚本。注:模块化当前只支持研发模式,要打包部署需要将module-info.java 删除,以非module化运行。

Java16之后,默认强封装JDK内部类,详见JEP 396 JEP 403 ,需在启动时添加相关参数开启包访问。较简单的是添加 --add-opens java.base/java.lang=ALL-UNNAMED ,也可根据需要缩小范围(在Java 9引入的JPMS。在对项目完成相关改造之前(当前未找到jar启动的方式),应该只能用ALL-UNNAMED表示对所有未命名模块开放)。 详见:Java 16 Java 17

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

nohup java --add-opens java.base/java.lang=ALL-UNNAMED -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar eladmin-starter-3.0.0.jar >nohup.out 2>&1 &

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

#启动示例
nohup java --add-opens java.base/java.lang=ALL-UNNAMED -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Dloader.path=lib -jar eladmin-starter-3.0.2.jar >nohup.out 2>&1 &
#在未来的3.x版本开始,因为已完成JPMS改造,可移除启动参数中 --add-opens 部分
nohup java -XX:+UseZGC -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Dloader.path=lib -jar eladmin-starter-3.0.3.jar >nohup.out 2>&1 &
key 目的
loader.path lib包加载路径
loader.home 用于解析loader.path中的相对路径。 例如,给定loader.path = lib,则$ {loader.home} / lib是类路径位置(以及该目录中的所有jar文件)。 此属性还用于查找loader.properties文件,如以下示例/ opt / app所示。它默认为$ {user.dir}。
loader.args main方法的默认参数(以空格分隔)
loader.main 要启动的主类的名称(例如com.app.Application)
loader.config.name 属性文件的路径(例如,classpath:loader.properties)。 默认为loader.properties。
loader.system 布尔值标志,指示应将所有属性添加到系统属性。 默认为false。

参考:executable-jar.launching


Spring Boot 2.6.0 + 版本,需在配置文件中添加。解决springfox启动报错问题

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

注意不要使用actuator系列依赖,否则需要添加配置支持。详见:SpringBoot-2.6.0


Maven引用方式 🎵

最新版本为: Maven Central

可根据需要选择版本

<!--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>eladmin</artifactId>
    <version>3.0.2</version>
    <type>pom</type>
</dependency>

项目简介

一个基于最新的Java 17版本、 Spring Boot 2.6、 Jpa、 JWT、Spring Security、Redis、ShardingSphere、RabbitMQ、Vue的前后端分离的后台管理系统

开发文档: https://el-admin.vip

体验地址: https://el-admin.xin

账号密码: admin / 123456

项目源码

后端源码 前端源码
原项目-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 17、Spring Boot 2.6。
  • 高效率开发,代码生成器可一键生成前后端代码
  • 基于注解的动态查询(Specification),可根据需要扩充查询注解。
  • 支持数据字典,可方便地对一些状态进行管理
  • 支持接口限流,避免恶意请求导致服务层压力过大
  • 支持接口级别的功能权限与数据权限,可自定义操作
  • 自定义权限注解与匿名接口注解,可快速对接口拦截与放行
  • 对一些常用前端组件封装:表格数据请求、数据字典等
  • 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断
  • 提供服务器性能监控功能
  • 支持运维管理,可方便地对远程服务器的应用进行部署与管理
  • 使用ShardingSphere实现多数据源和读写分离(Sharding-JDBC)。该方式针对Mysql数据库。对系统侵入性小。(只需引入依赖,并在yaml中配置数据源信息即可)。
  • 整合Redisson拓展Redis的功能,读写分离
  • 整合消息队列RabbitMQ,实现消息通知、延迟消息。

系统功能

  • 用户管理:提供用户的相关配置,新增用户后,默认密码为123456
  • 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限
  • 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单
  • 部门管理:可配置系统组织架构,树形表格展示
  • 岗位管理:配置各个部门的职位
  • 字典管理:可维护常用一些固定的数据,如:状态,性别等
  • 系统日志:记录用户操作日志与异常日志,方便开发人员定位排错
  • SQL监控:采用druid 监控数据库访问性能,默认用户名admin,密码123456
  • 定时任务:整合Quartz做定时任务,加入任务日志,任务运行情况一目了然
  • 代码生成:高灵活度生成前后端代码,减少大量重复的工作任务
  • 邮件工具:配合富文本,发送html格式的邮件
  • 阿里云OSS:可实现基础的上传及下载功能
  • 阿里短信通道SMS:可实现基础的发送短信功能
  • 服务监控:监控服务器的负载情况
  • 运维管理:一键部署你的应用

项目结构

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

  • eladmin-common 为系统的公共模块,各种工具类,公共配置存在该模块

  • eladmin-api 基础实体及DTO,方便后续服务拆分

  • eladmin-system 为系统核心模块,包含管理侧权限配置等。包含api模块service层的具体实现

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

  • eladmin-tools 为第三方工具模块,包含:邮件、OSS、SMS、本地存储

  • eladmin-generator 为系统的代码生成模块,代码生成的模板在 system 模块中

  • eladmin-starter 启动类,项目入口,包含模块及组件配置

  • eladmin-search 通过mongodb进行最基础的检索,整合elasticsearch,SPI相关demo

详细结构

- eladmin-common 公共模块
    - annotation 为系统自定义注解
    - aspect 自定义注解的切面
    - base 提供了Entity、Service、DTO基类和mapstruct的通用mapper
    - config 自定义权限实现、redis配置、openApi配置、Rsa配置等
    - exception 项目统一异常的处理
    - utils 系统通用工具类
- eladmin-api 基础实体及DTO
    - annotation 为模块自定义注解
    - modules 基础实体及接口定义
    - utils 通用工具类扩展
- eladmin-system 系统核心模块
	- config 配置跨域、静态资源、数据权限、DB Insert主键、实体表映射、系统完成入口
	    - thread 线程池相关
	    - rabbitmq 消息队列相关
	- modules 系统相关模块(登录授权、消息队列、系统监控、定时任务、运维管理等)
- eladmin-starter 系统启动入口。相关示例
- eladmin-logging 系统日志模块
- eladmin-tools 系统第三方工具模块
- eladmin-generator 系统代码生成模块

运行环境

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

特别鸣谢

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

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

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

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

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

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

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

项目捐赠

项目的发展离不开你的支持,请作者喝杯咖啡吧☕ Donate


Feature list

  • dev_3.0 Springdoc相关。Web侧跟进(无限delay)
  • ASM字节码增强
  • 授权(Authorization)模块-颁发及刷新Token (accessToken & refreshToken)Jwt Token 都是成对出现的,一个为平常请求携带的 accessToken, 另一个只作为刷新 accessToken 用的 refreshToken
  • dev_3.0 JPMS改造(3.0版本有做部分尝试,当前在IDEA中可启动,当下无法打包成功(3.0版本时明明可以打包成功的,只是启动不起来),也未找到jar包的启动方式,故暂缓,可能要等到Spring 6.x 及 Spring Boot 3.X对 JPMS相关支持及Java 17了)
  • db中时间的存储格式可以用datetime或者timestamp,datetime占用8个字节、存在时区问题但可存储的时间范围广,timestamp占用4个字节、只能存储1970~2037但无时区问题,后续确定是否需要由datetime转为timestamp

eladmin's People

Contributors

1797890817 avatar cnzbq avatar d15801543974 avatar dependabot[bot] avatar edinjohn avatar elunez avatar erichetti avatar everhopingandwaiting avatar imjyz avatar jhpx avatar jiabing0 avatar jiefei30 avatar jinlongliao avatar l2xing avatar lihengcn avatar linlihuiyang avatar lj-zhu avatar lwohvye avatar pleaseyang avatar shanezhiu avatar tsln1998 avatar wencygit avatar wtune avatar yangzongzhuan avatar yuankangli avatar yuchumian avatar yuyu1025 avatar zanjs avatar zhy6599 avatar zoulejiu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.