你的位置:MESSIER中文网 > AXGT中文网 >
发布日期:2025-01-03 19:07 点击次数:133
一.搭建
1.前端
2.后端
老生常谈的配置,修改mysql与redis即可。
二.业务功能介绍
功能上jeecgboot主要提供了系列的代码生成器、模板页面、报表页面。
1.报表功能
主要提供报表的相关操作。提供了积木报表插件,可以自定义数据报表、图形报表。并将报表挂载到菜单上。
2.在线开发
也就是代码生成器,可以可视化的在页面上新建数据库表,并通过数据库表生成前后台代码。减少业务代码开发的时间。
3.系统管理
用户管理、角色管理、机构管理、消息管理等基础模块。
4.系统监控
主要负责各种日志、监控的统一处理。
5.页面组件样式
常见案例、详情页、结果页、异常页、列表页、表单页主要提供了样式页面与控件页面示例。在开发过程中如果需要模板直接复制代码即可。详情请
三.后台架构介绍
1.概括
其中报表和代码生成器没有提供源码,如果有兴趣可以自行查看jar包源码。
2.架构核心包jeecg-boot-base
jeecg-boot-base包括了下文的几个部分。
1.接口包jeecg-boot-base-api
1.对外接口jeecg-system-cloud-api
使用feign+hystrix实现了服务间调用加熔断,单机环境并没有使用。
2.服务内接口jeecg-system-local-api
该包提供了下文使用的常用方法接口。仅提供了接口并无其他配置。
2.核心配置包jeecg-boot-base-core
1.通用类common 1.api
其中为通用接口与通用返回对象。
1.Result
其中Result为所有类的返回实体,这样能够通过code编码和message获取是否成功和成功/失败的信息。此类是常用的架构设计
2.aspect
为项目的自定义注解,使用了AOP的切面方式实现,这里就不详细说了,比较简单都可以看懂。
3.constant
存放着枚举类与常量池,这里不多说了。
4.es
为操作es的通用类,主要是配置es连接和查询时动态拼接and/or的方法。
5.exception
exception为自定义的异常类。
1.JeecgBootExceptionHandler
这里详细说一下JeecgBootExceptionHandler,该类也是常见的架构设计之一,核心为@RestControllerAdvice、@ExceptionHandler。当业务代码中没有对异常拦截时,该类会自动拦截异常,并数据log日志。所以某些日志在该类配置后,就不需要在每个接口中都捕获这个异常了。
6.handler
为下文规范提供了接口类。没有其他特别说明。
7.system类
这里主要说controller、entity、service等业务代码的父类
1.JeecgController<T, S extends IService>
所以controller的父类,提供了导入导出的功能。还可以在里面扩展分页、排序、常用调用方法等,这样就可以避免相同的代码多次添加。这也是架构设计中常用的技巧。
2.JeecgEntity
将通用字段如id、创建人、修改人、创建时间、修改时间等字段统一封装在一个实体中,使用其他实体继承。这也是架构设计中常用的技巧。
3.service
主要提供Mybatis-plus提供的curd方法。
8.utli
提供了一大波的工具类,如果在工作中需要,直接复制使用。
2.通用配置类config
1.mybatis
1.MybatisInterceptor
MybatisInterceptor这里主要说MybatisInterceptor,该类负责在mybatis执行语句前,拦截并获取参数,将创建人、创建时间等字符动态插入。这里上部分核心代码。
2.MybatisPlusSaasConfig
该类主要负责多租户,什么是多租户呢?
多租户:就是多个公司/客户公用一套系统/数据库,这就需要保证数据的权限。
该场景比较少不详细说明。
2.oss
主要从application-dev.yml获取到上传的路径与配置。
3.shiro
安全框架主要有两个目标:认证与鉴权。
认证:判断用户名密码是否正确。
鉴权:判断用户是否有权限访问该接口。
这里本文着重讲解,如果遇到shiro相关应用,可以项目直接移植使用。
1.CustomShiroFilterFactoryBean
该类主要负责解决资源中文路径问题。这里有个通用的解决方式。
新建类集成ShiroFilterFactoryBean方法,并重写核心方法createInstance(),并在注入时,注入新建的类CustomShiroFilterFactoryBean,这样就达到的以往重新源码的功能。因为spring提供的功能都是用该思想,所以修改源码的地方就原来越少了,都可以使用该方式实现。
2.JwtFilter
同上文,复写BasicHttpAuthenticationFilter的验证登录用户的方法,在执行登录接口后判断用户是否正确。
3.ResourceCheckFilter
负责鉴权使用,判断当前用户是否有权限访问。
4.ShiroRealm
主要负责获取用户所有的菜单权限,并提供token的一系列方法。
5.ShiroConfig
此为shiro的核心配置类,大多数写法都是固定写法。
4.sign
这里不详细讲解,主要描述前台传来的签名是否合法。
5.thirdapp
根据application-dev.yml配置获取是否开启第三方接入验证。@ConfigurationProperties(prefix = "third-app.type")获取配置文件中的third-app.type的value值。
6.AutoPoiConfig、AutoPoiDictConfig
主要负责将excel中的数据转换为数据字典。
7.CorsFilterCondition、JeecgCloudCondition
通过获取application-dev.yml,主要判断是否有CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr";的key值。
context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY);是从application-dev.yml生成的map获取value值。
8.RestTemplateConfig
在服务间调用时设置连接时长,如果单体应用,改配置没有使用。
9.StaticConfig
从application-dev.yml获取配置,设置静态参数初始化。
10.Swagger2Config
Swagger2文档配置类,如果有需要请执行复制使用。
11.WebMvcConfiguration
springboot的常用配置,如跨域配置,精度丢失配置,静态资源配置。都是固定写法,如果需要请自行参考。
12.WebSocketConfig
springboot提供的websocket的start配置方式,如果有疑问可以参考博主之前的博文-websocket的集成使用
3.业务接口modules.base
主要提供了日志相关的curd,不多做描述。
3.工具包jeecg-boot-base-tools
主要提供了一些功能的实现类与使用方法,不多说 ,比较简单。
1.TransmitUserTokenFilter、UserTokenContext
主要负责将token放在上下文中。
2.JeecgRedisListerer、RedisReceiver
这里是发送消息模板的封装。核心是从上下文中的getbean方法动态的指定想要调用的JeecgRedisListerer实现类。一种多态的实现方式。
3.JeecgRedisCacheWriter
可以看到思想还是上文所说,将RedisCacheWriter类中的方法全部复制出来,并生成新类JeecgRedisCacheWriter,在新类中修改,他的目的是信息模块在存入缓存时,有统一的前缀。在使用时,注入使用JeecgRedisCacheWriter即可,跟修改源码有这一样效果,但是更加优雅。可以看出spring的设计思想是多牛批。
3.测试包jeecg-boot-base
主要负责调用其他功能,没啥实质意义。
下图类是xxljob执行定时任务时的写法,可以看一看。
4.业务包jeecg-boot-module-system
主要为业务代码包,这里找几个着重讲解一下。
1.api.controller
为微服务为其他服务提供基础应用接口的包,如果没有微服务该包不生效。
2.message
该模块为消息模块业务,其中使用了quartz和spring提供的websocket start。如果有兴趣可以参考博主给的连接。
3.monitor
提供了redis监控的接口。如果需要可以自行查看,比较简单。
4.quartz
定时任务start,如果想具体了解可以参考博主文章:quartz集成全解析
5.jeecg-boot-starter
springboot的核心就是提供各种各样的start,在jeecg中也提供了很多的start,分别是上述的四个,其中job为xxl开源项目、cloud为在服务间调用时,将token放再头中,这里不详细讲解。
下文示例均在jeecg-cloud-module/jeecg-cloud-system-start中。
1.jeecg-boot-starter-rabbitmq
1.MqListener、BaseRabbiMqHandler
在监听消息队列时,使用以下方法即可。原因是必须加入ack与nack。防止队列占用。
使用时,该类继承了BaseRabbiMqHandler,并使用父类的方法,并使用new MqListener<BaseMap>()函数式方法获取消息队列中的信息。
BaseRabbiMqHandler主要的功能是提供了ack与nack,并将token放入头中。
2.RabbitMqClient
主要在队列初始化时实现队列的初始化,而是否初始化根据使用时的@RabbitListener、@RabbitComponent判断。
3.RabbitMqConfig
为消息队列的常用配置方式。这里不多描述。
4.event
这个包主要是为使用mq发送消息使用,多类别的消息会实现JeecgBusEventHandler类,而BaseApplicationEvent通过消息类型传入的不同的参数选择合适的业务类发送消息。
5.DelayExchangeBuilder
为延时队列的交换机声明与绑定。
2.jeecg-boot-starter-lock
1.如何使用分布式锁
使用时有两种方式,一种是使用注解方式,一种是使用redisson提供的API。
2.RepeatSubmitAspect
通过公平锁判断是否是多次点击按钮。
3.DistributedLockHandler
该类主要是jLock的切面类,通过jLock注解参数,判断需要加锁的类型,同时加锁的方法也不相同。
4.RedissonLockClient
redisson客户端,提供了一大波方法,请自行查看。
5.core包
主要通过application.yml配置文件获取redis连接类型,通过根据该参数动态的选择策略类,连接redis。
6.jeecg-cloud-module
这里详细的说一下jeecg-cloud-gateway,因为其他的都是开源项目没下载即用。
jeecg-cloud-system-start为封装start的使用方法,上文已经介绍了。
1.jeecg-cloud-gateway
1.GatewayRoutersConfiguration
当固定的几个路由,有特殊化的执行方法。
2.RateLimiterConfiguration
主要配置限流,与application.yml一起使用,下文配置含义是,发送过来的请求只能容纳redis-rate-limiter.burstCapacity的配置(3次)多余的会全部丢弃(限流),每秒消费redis-rate-limiter.replenishRate(1次)。
3.FallbackController
熔断的执行方法。
4.GlobalAccessTokenFilter
全局拦截器,在调用其他服务时,将用户信息放在请求头中。
5.SentinelFilterContextConfig
使Sentinel链路流控模式生效,固定写法。
6.HystrixFallbackHandler、SentinelBlockRequestHandler
在降级/限流时,将异常信息转换成json返回给前台。
7.LoderRouderHandler
动态刷新路由。
8.MySwaggerResourceProvider、SwaggerResourceController
将swagger地址统一管理起来
9.DynamicRouteLoader、DynamicRouteService
DynamicRouteLoader:通过application.yml判断从nacos/redis中获取路由信息,并实现动态的加载。DynamicRouteService:为底层处理路由的API。
四.总体感想
文章到这里差不多就接近尾声了,大多数功能附带着代码都讲述了一遍。在功能上来说,jeecg提供了很多常用功能,如rabbitMq封装、积木报表、代码生成器等。这些在日常工作中有很大的概率碰上,如果有以上需求,可以来框架中直接复制粘贴即可。
但是在格式规范上,如出入参的规范,代码的写法,代码的格式化等方面,并不是特别统一,且没有严格规范。总体来说非常适合做私活与毕业设计,同时也是最早一批开源的前后端项目脚手架,爆赞。
到此这篇关于java开源项目jeecgboot的文章就介绍到这了,更多相关java开源项目jeecgboot内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:SpringBoot中使用JeecgBoot的Autopoi导出Excel的方法步骤Jeecg-Boot异常处理'jeecg-boot.QRTZ_LOCKS' doesn't exist问题
上一篇:没有了