# platform 指南
hawthorn-platform
hawthorn 后端工程历史版本记录
Author
andy.ten@tom.com & xukaixing@hotmail.com
Hawthorn框架特点:
- 基于SpringCloud框架,自定义集成封装了底层框架
- 实现SpringBoot自动装配,底层框架自带部分controller/service方法
- 实现根据service方法前缀自动添加事务注解,各业务方法无须增加事务注解
- 支持跨域访问
- 实现前端查询条件自动拼接where条件方式
- 实现返回统一格式的响应返回result方式
- 实现全局捕获exception方式,自定义异常代码
- 事务控制集成了seata分布式事务
- 集成easyExcel处理工具,提供单独封住的excel service方法供业务使用,excel数据读取保存实现了batch分批保存
- 自动记录service执行时间,超过3/5秒有单独日志记录
- 提供记录日志的log服务,可通过注解方式记录日志
- 封装了redis处理方法,提供redis工具类
- 支持caffeine二级缓存
- 封装了Quartz组件,支持动态配置Quartz以及自动记录job日志
- 实现了多线程服务,能够自定义线程池
- 自定义DBService工具类,来实现crud方法
- Feign接口调用实现httpclient线程池方式,框架封装了feign接口统一配置,支持头信息传递(用户信息等)
- 实现了feign-hystrix熔断配置
- 登录日志/操作日志/定时任务日志实现mq队列异步保存
- 实现自动填充createBy/updateBy等字段,支持version乐观锁
- 实现字典code/用户userid/部门deptid/公司companyid等缓存翻译功能,将结果集翻译为id + name方式返回前端
- 实现将查询结果集日期/时间字段格式化后返回前端
- 集成swagger2配置
# 前序
- 安装OpenJdk8
- 开发 ide 建议使用
IntelliJ IDEA
, 必要的插件列表:CodeGlance3
: 代码折叠插件Grep Console
: 设置控制台日志颜色插件JRebel and XRebel
: 热部署插件JRebel mybatisPlus extension
: mapper.xml热部署插件Json Formatter
: json格式化工具Maven Helper
: maven帮助工具MyBatisCodeHelperPro
: mybatis辅助管理工具Rainbow Brackets
: 彩虹括号Save Action
: 保存fixed格式化工具
# 依赖
<!-- 设置源码和输出文件的编码规则 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>-->
<!-- 版本清单 -->
<java.version>8</java.version>
<maven.build.timestamp.format>yyyy_MM_dd_HH_mm_ss</maven.build.timestamp.format>
<project.build.date>${maven.build.timestamp}</project.build.date>
<spring.icloud.version>Hoxton.RELEASE</spring.icloud.version>
<!-- <spring.icloud.version>2020.0.4</spring.icloud.version>-->
<!-- 不能用最新版,需要与Hoxton匹配的版本-->
<nacos.discovery.version>2.2.1.RELEASE</nacos.discovery.version>
<nacos.config.version>2.2.1.RELEASE</nacos.config.version>
<spring.cloud.bootstrap.version>3.0.2</spring.cloud.bootstrap.version>
<swagger.springfox.version>3.0.0</swagger.springfox.version>
<swagger.knife4j.version>3.0.2</swagger.knife4j.version>
<swagger2.version>2.9.2</swagger2.version>
<!-- swagger的annotations 、models 版本升级为1.5.22.默认为1.5.20,解决刷新swagger页面,会报java.lang.NumberFormatException: For input string: "" 错误-->
<swagger2.annotations.version>1.5.22</swagger2.annotations.version>
<swagger2.models.version>1.5.22</swagger2.models.version>
<swagger.ui.version>2.9.2</swagger.ui.version>
<swagger.bootstrap.ui.version>1.9.2</swagger.bootstrap.ui.version>
<hutool.version>5.3.9</hutool.version>
<!--
<jdbc.mysql.version>5.1.35</jdbc.mysql.version>
-->
<jdbc.mysql.version>8.0.20</jdbc.mysql.version>
<!-- <seate.version>1.5.2</seate.version>-->
<mybatis.plus.version>3.3.2</mybatis.plus.version>
<mybatis.plus.gen.version>3.3.2</mybatis.plus.gen.version>
<mybatis.plus.gen.velocity.version>2.2</mybatis.plus.gen.velocity.version>
<alibaba.druid.version>1.1.22</alibaba.druid.version>
<alibaba.fastjson.version>1.2.83</alibaba.fastjson.version>
<alibaba.easyexcel.version>3.0.5</alibaba.easyexcel.version>
<logstash.encoder.version>6.3</logstash.encoder.version>
<apache.common.lang3.version>3.7</apache.common.lang3.version>
<apache.httpclient.version>4.5.9</apache.httpclient.version>
<common.collection.version>3.2.2</common.collection.version>
<common.beanutils.version>1.9.4</common.beanutils.version>
<redis.commons.pool2.version>2.7.0</redis.commons.pool2.version>
<lombok.version>1.18.20</lombok.version>
<jwt.version>0.9.1</jwt.version>
<quartz.version>2.3.2</quartz.version>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 目录
.
├── pom.xml
└── src
└── main
├── java
│ ├── com
│ │ └── hawthorn
│ │ └── platform
│ │ ├── PlatformAutoEnable.java
│ │ ├── annotation
│ │ │ ├── CheckData.java
│ │ │ ├── CheckToken.java
│ │ │ ├── ExecTime.java
│ │ │ ├── MarkLog.java
│ │ │ └── NoCheckToken.java
│ │ ├── aspect
│ │ │ ├── ControllerAspect.java
│ │ │ ├── ExecTimeAspect.java
│ │ │ ├── MarkLogAspect.java
│ │ │ ├── ResponseBodyAdviceImpl.java
│ │ │ └── TransactionAdviceConfig.java
│ │ ├── boot
│ │ │ └── AbstractSpringConfiguration.java
│ │ ├── cache
│ │ │ ├── CacheBean.java
│ │ │ └── CacheConfig.java
│ │ ├── config
│ │ │ ├── ApiError.java
│ │ │ ├── CorsConfig.java
│ │ │ ├── DruidConfig.java
│ │ │ ├── DruidDataSourceProperties.java
│ │ │ ├── ExecutorConfig.java
│ │ │ ├── FeignConfig.java
│ │ │ ├── FeignInfoLogger.java
│ │ │ ├── HystrixConfig.java
│ │ │ ├── HystrixThreadPoolsStrategy.java
│ │ │ ├── JacksonConfig.java
│ │ │ ├── JwtTokenConfig.java
│ │ │ ├── MybatisPlusConfig.java
│ │ │ ├── PlatformAutoConfigurationPackage.java
│ │ │ ├── PlatformProperties.java
│ │ │ ├── ResponseAdviceConfig.java
│ │ │ ├── SleuthPreventSamplerConfig.java
│ │ │ ├── SwaggerConfig.java
│ │ │ └── WebMvcConfig.java
│ │ ├── constant
│ │ │ └── ApplicationConstant.java
│ │ ├── context
│ │ │ ├── ContextHolder.java
│ │ │ ├── Message.java
│ │ │ └── RequestHeaderHandler.java
│ │ ├── controller
│ │ │ ├── DictApiController.java
│ │ │ ├── ExcelApiController.java
│ │ │ └── JobApiController.java
│ │ ├── excel
│ │ │ ├── CustomCellWriteHandler.java
│ │ │ ├── ExcelCellMergeStrategy.java
│ │ │ ├── ExcelCellStyleStrategy.java
│ │ │ └── ExlReadListener.java
│ │ ├── exception
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── feign
│ │ │ ├── JobLogFeignService.java
│ │ │ └── OperationLogFeignService.java
│ │ ├── filter
│ │ │ ├── CustomMDCFilter.java
│ │ │ └── CustomTracingFilter.java
│ │ ├── generator
│ │ │ ├── CustomStrategyConfig.java
│ │ │ ├── MPCodeGenerator.java
│ │ │ └── MySqlTypeConvertConfig.java
│ │ ├── hystrix
│ │ │ ├── AbstractHystrixConcurrencyStrategy.java
│ │ │ ├── DelegatingCallable.java
│ │ │ ├── HystrixConcurrencyContext.java
│ │ │ ├── HystrixConcurrencyContextHolder.java
│ │ │ ├── MyFeignClientsConfiguration.java
│ │ │ ├── MyHystrixFallbackHandler.java
│ │ │ ├── MyHystrixFallbackHandlerFactory.java
│ │ │ ├── ReactiveDefaultHystrixConcurrencyStrategy.java
│ │ │ ├── ReactiveSecurityHystrixConcurrencyStrategy.java
│ │ │ ├── ServletDefaultHystrixConcurrencyStrategy.java
│ │ │ └── ServletSecurityHystrixConcurrencyStrategy.java
│ │ ├── interceptor
│ │ │ ├── JwtTokenProvider.java
│ │ │ ├── TokenInterceptor.java
│ │ │ └── TokenVerify.java
│ │ ├── model
│ │ │ ├── MetaObjectHandlerImpl.java
│ │ │ ├── dto
│ │ │ └── po
│ │ ├── quartz
│ │ │ ├── ExecutionJob.java
│ │ │ ├── QuartzMyUtil.java
│ │ │ ├── QuartzRunnable.java
│ │ │ └── config
│ │ ├── redis
│ │ │ ├── FastJson2JsonRedisSerializer.java
│ │ │ ├── RedisConfig.java
│ │ │ └── RedisMyClient.java
│ │ ├── repository
│ │ │ ├── DBMapper.java
│ │ │ ├── DictApiMapper.java
│ │ │ ├── ImportExcelMapper.java
│ │ │ ├── JobApiMapper.java
│ │ │ ├── MenuApiMapper.java
│ │ │ ├── NoWarnMapper.java
│ │ │ ├── QuartzJobLogMapper.java
│ │ │ ├── QuartzJobMapper.java
│ │ │ ├── SupperMapper.java
│ │ │ ├── SysTabExportMapper.java
│ │ │ └── provider
│ │ ├── service
│ │ │ ├── DBService.java
│ │ │ ├── DictApiService.java
│ │ │ ├── ExcelApiService.java
│ │ │ ├── JobApiService.java
│ │ │ ├── MenuManagerService.java
│ │ │ ├── QuartzJobService.java
│ │ │ ├── TransResultService.java
│ │ │ └── impl
│ │ ├── utils
│ │ │ ├── MyPropsConfig.java
│ │ │ ├── common
│ │ │ ├── file
│ │ │ ├── http
│ │ │ ├── json
│ │ │ ├── reactive
│ │ │ └── token
│ │ ├── validatecode
│ │ │ ├── IVerifyCodeGen.java
│ │ │ ├── LoginVerifyCode.java
│ │ │ ├── LoginVerifyEnum.java
│ │ │ ├── LoginVerifyGen.java
│ │ │ ├── SimpleCharVerifyCodeGenImpl.java
│ │ │ └── VerifyCode.java
│ │ └── wrapper
│ │ ├── RequestWrapper.java
│ │ └── ResponseWrapper.java
│ └── org
│ └── springframework
│ └── cloud
│ └── openfeign
│ ├── FeignFallback.java
│ ├── HystrixFallbackConfiguration.java
│ ├── HystrixFallbackFactory.java
│ ├── HystrixFallbackHandler.java
│ ├── HystrixFallbackHandlerFactory.java
│ ├── HystrixFallbackResults.java
│ └── HystrixFallbackTargeter.java
└── resources
├── META-INF
│ └── spring.factories
├── config.properties
└── rebel.xml
46 directories, 109 files
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# 版本
v1.4.0 : 2023.05.06
增加job的log日志功能,通过mq写日志,解决多个数据库日志写入问题
v1.3.9 : 2023.04.10
增加excel导出数值列处理
ß
v1.3.7 : 2022.12.10
增加MDC的account处理 增加skywalking处理
v1.3.5 : 2022.10.12
增加多公司全局变量
v1.3.4 : 2022.08.06
增加Quartz组件
v1.3.3 : 2022.07.12
增加MarkLog注解
解决导出列别名问题
解决部门简称/全称不一致问题
v1.2.7 : 2022.06.23
调整代码生成器格式和内容
excel导出增加是否需要驼峰转换的export导出方法
表选字典功能升级
v1.2.6 : 2022.05.04
增加dict api逻辑,将表选逻辑更改为各个工程自身逻辑
v1.2.5 : 2022.03.27
增加vue版本的菜单管理权限
v1.2.4 : 2021.12.29
实现excel导出功能
实现excel导出多sheet页功能
v1.2.3 : 2021.12.22
优化DBMapper,解决批量插入和修改问题 增加excel导入功能
v1.2.2 : 2021.12.06
优化feign接口调用hystrix实现线程间共享request参数
FeignConfig增加拦截器
v1.2.1 : 2021.12.03
增加controller切面
设置线程存储变量
自动填充更能优化,解决乐观锁下无法自动填充更新人、更新时间问题
v1.1.9 : 2021.11.30
优化基础平台
v1.1.8 : 2021.03.23
增加Dockerfile打包文件 调整component包结构 调整pom.xml的maven打包插件
v1.1.7 : 2021.03.18
swagger2.0升级为3.0 增加Knife4j增强ui 增加logstash日志配置
v1.1.6 : 2022.08.01
完善系统管理服务功能 新增系统消息管理
v1.1.4 : 2021.12.10
实现收藏夹功能 实现最近访问功能
v1.1.3 : 2021.11.30
将菜端授予权限功能由admin工程转移到login工程 重构菜单权限方法,返回json格式内容
# 主页
- 欢迎访问个人 github-xukaixing (opens new window) 主页.
- 欢迎访问个人 gitee-xukaixing (opens new window) 主页.