不要再重复造车了, 这个项目把你要的代码都封装好了

Whitetown-dog后台组件化演示平台

基本介绍
  • 很多项目都会用到的一些通用性代码, 这些通用性代码还带有一些业务属性. 因而不太容易找到现成可用的.
  • 为了解决这个问题, 本项目对比较通用的功能按类别封装, 以组件化的形式出现, 使得在开始新的项目时, 对于这些通用组件, 只需要直接依赖相应模块即可使用, 避免重复工作.
  • 显而易见的是, 本项目尽量将同类功能整合到一个模块中,
    以较为清晰的项目结构呈现, 使得开发人员能够快速找到自己所需要那部分对应的模块. 其目的是让开发人员可以方便的使用项目中某一部分代码, 而不一定是整体.
项目地址
  • https://github.com/yung2mao/whitetown-dog

  • 如果你喜欢这个项目, 或对项目有任何疑问, 都欢迎联系我, 项目README中可以找到我的联系方式.

  • 希望和你沟通, 以及您的指点.

模块简介
  • whitetown-base 通用组件

    该模块包含整个项目可能用到的通用代码和依赖. 例如全局配置, 全局异常处理, 通用工具类, 通用异常类, 线程池配置等.

    着重说明一下, *这里还完成了一个本地缓存数据结构, 底层基于ConcurrentHashMap,
    提供了过期数据清除策略以及基于LRU的缓存淘汰策略. 该结构在本项目许多地方都有所应用. *

    另外还提供了一个缓冲池, 可以方便的创建不同类别缓冲池. 目前还没有做太多应用.

  • dog-auth-ea

    后台权限控制通用模块, 采用Spring security结合注解形式控制后台访问权限.

    本项目权限控制设计方式为: 用户绑定角色, 角色绑定菜单,
    菜单对应后台接口权限. 由此, 取消角色某个菜单权限, 页面看不到菜单的同时, 该角色也无法访问菜单对应的接口. 从而实现了前后端权限都进行控制.

  • dog-auth-user

    用户系统的实现, 实现了用户管理, 角色管理, 菜单管理, 满足前端页面的权限控制要求.

    同时, 结合 dog-auth-ea ,实现控制前端菜单权限的同时, 后端权限也同样受控.

  • white-log 日志组件

    日志组件中对客户端和服务端做了分离, 考虑到后面可能会将项目改为分布式. 在日志客户端和服务端定义了相应的数据连接接口.

    日志采集采用log4j2, 定义了几个特定功能的Logger, 根据Logger名称的差异对日志进行处理.

    日志存储采用Elasticsearch(事实上, 过去使用HBase存储策略性能也很优异,但整体结构较重,没有太大必要),
    日志的展示则放在独立模块进行. 因而整个日志组件是非常灵活且易于融合进新的项目的.

  • white-monitor 监控组件

    监控组件主要是对系统运行信息进行监控,包括基本的系统信息, 内存运行, CPU运行,文件系统和网络系统运行信息,
    监控信息采集采用oshi框架, sigar 也能达到相同的效果, 但需要在系统添加一个dll文件, 没那么友好.
    说实话, sigar 采集效率更高, 尤其是对网络运行数据的采集, oshi 有着极大的延迟.

    监控组件内部同样定义了客户端和服务端, 这么做的原因仍然是考虑到分布式扩展, 可能存在一个服务端对应多个客户端,
    单个服务内部只需要采集数据并将数据传输给服务端, 其他的逻辑应该交给服务端处理.
    数据传输方面, 客户端和服务端采用的是Netty进行通信.

    数据持久化则提供了两种方式, 分别为保存本地文件和保存数据库, 你也可以自己再定义新的.
    需要说明, 保存数据库的方案采用了基于范围的分表机制, 考虑到不想引入太多外部依赖, 我自己封装了一套,
    至于好不好用, 希望您能提出意见.

    监控组件的使用非常简单, 我定义了两个注解分别代表启用客户端和启用服务端. 只需要简单的在某个可被Spring扫描
    的类上添加注解即可生效. 客户端注解还可以选择数据本地保存或者发送服务端.

    所以, 即刻生效.

  • white-xml XML解析组件

    为什么会出现这个组件! 实在是因为对一些使用冗长的XML传输数据的项目难以仍受, 都2020年了,
    还有使用嵌套十几层上百字段的xml进行数据传输的项目, 没错, 如果你也在使用, 你会理解的.

    最初的方法是采用dom4j或者一些别的库按XPath解析数据, 但问题显而易见, 几百个字段, XPath路径准确性难保证,
    结局就是大量重复性工作.

    经过尝试, 总算有了突破. 此处借鉴该思路, 对代码进行了重写.

    大致思路是以一个XML文件作为模板, 一个XML对应一个实体类, 所以将XML中相应位置标识为对应的字段, 然后在解析和封装时做替换即可.
    为了提升性能, 在程序初始化时即将相应映射信息初始化为元数据, 供解析封装时立即取用.

    经过完善, 解析XML为实体类, 将对象封装成指定结构XML, 都是一行代码即完成.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值