Junx-EP开发手册-功能模块开发
EP框架的核心思想就是简单化,模块化,标准化。让整个开发框架简单、标准,并且是模块化按需配置和加载的,只需引入jar包,即可加载对应功能的表结构,拥有对应的菜单界面或功能接口。下面介绍一下EP内置实现的功能模块。
一、定时任务模块junx-ep-scheduler
如果需要定时任务功能的系统,可以引入定时任务模块junx-ep-scheduler对应的jar包,前提是基于junx-ep-sys进行开发。
<dependency>
<groupId>io.github.junxworks</groupId>
<artifactId>junx-ep-scheduler</artifactId>
<version>2.1.0</version>
</dependency>
jar包默认依赖的ui界面,是基于layui开发的前端操作界面:
<dependency>
<groupId>io.github.junxworks</groupId>
<artifactId>junx-ep-scheduler-ui</artifactId>
<version>2.1.0</version>
</dependency>
如果不需要UI界面的,可以直接去掉改jar包引入。
junx-ep-scheduler模块是基于quartz做的分布式定时任务管理,数据库会自动注入quartz的表结构,支持配置是否集群模式运行,集群模式下支持多实例同时跑定时任务。定时任务的执行是封装过的,定时任务底层是执行springboot的bean方法,支持传入外部静态参数,下面是定时任务管理的菜单。
可以对定时任务做增删改查,执行、暂停、恢复等操作,在执行日志目录里面可以看到定时任务的执行情况。
新增定时任务填入如下参数:
基于springboot的bean来配置,简单并且容易理解。定时任务配置好了以后,默认是开启的,等待quartz的调度,如果不需要调度,则在外面管理列表中暂停即可。
二、代码生成模块junx-ep-codegen
junx-ep-codegen代码生成,是为了方便开发人员写代码,减少代码量,提供表准的代码生成功能,底层是基于freemarker实现的模板引擎。跟scheduler模块一样,前提是基于junx-ep-sys进行开发。下面是引入codegen模块的pom配置:
<dependency>
<groupId>io.github.junxworks</groupId>
<artifactId>junx-ep-codegen</artifactId>
<version>2.1.0</version>
</dependency>
跟定时任务模块一样,codegen提供了内置的ui界面,如果不需要的话,可以排除对应的ui的jar包。
<dependency>
<groupId>io.github.junxworks</groupId>
<artifactId>junx-ep-codegen-ui</artifactId>
<version>2.1.0</version>
</dependency>
在引入junx-ep-codegen的jar包后,会自动注入对应的菜单,同时新增一个菜单目录,叫EP代码生成,其下包含了三个子菜单,分别是数据源管理、模板管理、生成器管理。代码生成的基础逻辑就是基于数据库的表结构,生成对应的entity实体、dto、condition、vo、controller、mapper接口、mapper xml、service、service实现等等java类,同时还可以生成前端列表查询、编辑对应的html和js代码,生成这些代码后,以zip包的方式从服务器下载下来,解压后需要手动复制到自己项目对应的目录,做些许修改就能运行,实际项目中一个增删改查标准页面,通过代码生成,开发时间仅需10-15分钟即可完成,比重头开始编码快5-10倍。下面对每个菜单功能进行介绍:
数据源管理:顾名思义,就是管理需要生成代码的数据库,添加数据源后,在生成器中可以选择对应的数据源进行代码生成,下面是数据源管理的新增页面,属性都很简单,不再赘述。
模板管理:基于数据库表结构,生成对应代码的模板,支持自定义,语法是freemaker的语法。EP提供了一套内置的代码生成模板,可以直接使用或者参考。
模板说明里面说明了都有哪些内置参数。
生成器管理:管理代码生成器,系统内置了3个基础的代码生成器,分别是仅生成前端代码的EP默认前端代码生成器
、仅生成pojo对象的EP默认POJO对象生成器
、生成全部代码的EP默认全域代码生成器
。
新建生成器的时候,填入名称和描述,选择对应的模板,移到右边选择框即可,最后点确认保存。这个生成器生成的代码就是其内部模板对应的代码文件。最后打包成zip包下载到本地。
代码生成器的执行,会弹出执行窗口,在执行窗口中,选择数据源,可以通过表名进行表过滤,选择需要生成代码的表,最后点击生成,等几秒就会收到服务器下载文件的弹窗。
下载代码包解压即可。
三、文件上传模块junx-ep-fs
junx-ep-fs是专门用来做文件上传与管理的,可以单独引入jar包,也可以跟junx-ep-sys结合使用,只需要项目引入jar包
<dependency>
<groupId>io.github.junxworks</groupId>
<artifactId>junx-ep-fs</artifactId>
<version>2.1.0</version>
</dependency>
mapper扫描能扫描到fs的mapper即可
@MapperScan(basePackages = { "io.github.junxworks.ep.*" }, annotationClass = Mapper.class)
1、文件存储驱动
文件上传模块,内部提供了文件上传与存储的逻辑,文件上传通过模块内部的io.github.junxworks.ep.fs.controller.FileController
接收http请求,进行文件接收,存储这块的话,内部提供了2中存储驱动,分别是基于服务器本地文件系统的LocalFileSystemDriver
与基于阿里云OSS对象存储服务的OssRepositoryDriver
,文件服务默认是基于本地文件系统的存储驱动,可以通过配置junx.ep.fs.mode
,配置文件存储默认驱动,支持多个存储驱动同时运行。客户端在调用文件存储的时候,通过io.github.junxworks.ep.core.fs.FsClient.upload(String mode, MultipartFile file)
方法来选择采用哪种存储模式,如果不传,则使用文件服务器配置的默认存储驱动进行存储。
2、接口访问权限控制
文件上传模块引入了junx-ep-sys模块,间接依赖junx-ep-auth模块,这里可以使用auth模块的simple account配置功能,配置一个简单的通用账户,提供给客户端进行访问。
junx:
ep:
auth:
shiro:
simple-accounts:
- epRamKey: test
epRamSecret: "asdkjkljf%^78123"
authorizes: /ep/fs/files/**
客户端如果通过FsClient客户端进行文件上传下载,则在FsClient对象中设置对应的header即可,默认是epRamKey与epRamSecret。
如果客户端不通过FsClient而是直接通过http协议访问文件服务,则可以基于auth的redis分布式缓存进行校验,这里只提供了认证机制,认证过后的请求都有文件上传下载接口调用权限。
3、客户端如何上传下载
junx-ep-core模块中提供了通用的FsClient客户端,这里通过httpclient实现了基础的文件上传下载功能,可以在java代码中直接使用,需要设置fsAddr和orgNo参数,如果文件上传服务配置了auth模块的simple account,则还需要设置header的epRamKey与epRamSecret。FsClient代码实现请参考io.github.junxworks.ep.core.fs.FsClient
。在业务项目中注入FsClient对象即可使用,注入方式如下:
通过FsClient对象进行文件上传下载。
4、业务侧的FileController
junx-ep-sys模块中提供了方便业务侧上传下载的文件服务接口io.github.junxworks.ep.sys.controller.EpFileController
,这个是在业务系统中的controller,底层依然是通过FsClient进行的请求转发,这个EpFileController
可以直接对js中的接口请求。具体的方法可以查看该controller代码。
5、简单文件服务器实现
这里提供了一个简单的文件服务作为样例,具体参考https://gitee.com/junxworks/junx-ep-simplefs。
标题:Junx-EP开发手册-功能模块开发
作者:michael
地址:https://blog.junxworks.cn/articles/2023/08/08/1691466331477.html