Skip to content

zhengcheng是一个基于SpringBoot的框架支持项目,只需简单配置,即可快速接入各种通用组件,从而节省大量时间,让我们在开发业务时能够专注于业务的编写而不必过多的关注框架的配置,并且可以促进团队合作,降低维护成本,减少低级BUG,有助于代码审查。

License

Notifications You must be signed in to change notification settings

zhangquansheng/zhengcheng-parent

Repository files navigation

新征程框架项目

zhengcheng是一个基于SpringBoot 的框架支持项目,只需简单配置,即可快速接入各种通用组件,从而节省大量时间,让我们在开发业务时能够专注于业务的编写而不必过多的关注框架的配置,并且可以促进团队合作,降低维护成本,减少低级BUG,有助于代码审查。

Maven 安装

把项目中的pom.xmlparent中替换以下内容:

<parent>
    <groupId>com.zhengcheng</groupId>
    <artifactId>zhengcheng-parent</artifactId>
    <version>6.1.1-RC</version>
</parent>

文档 | Documentation

系统模块

zhengcheng-parent    
├── magic      // [示例] `zhengcheng` 框架示例项目
├── zhengcheng-bom          // [依赖] 定义`zhengcheng`包,方便引入`zhengcheng`时对齐版本。
├── zhengcheng-common       // [核心] `zhengcheng`公共模块
├── zhengcheng-dependencies // [依赖] 依赖版本信息
├── zhengcheng-doc          // [文档] `zhengcheng`开发文档
├── zhengcheng-plugin        // [插件] `zhengcheng`第三方插件实现
       └── sensitive-plus            // [插件] 数据脱密的SDK
├── zhengcheng-starter       // [整合] zhengcheng 与其它框架整合
       └── zhengcheng-elasticsearch-spring-boot-starter   // 整合 elasticsearch 通用组件
       └── zhengcheng-encrypt-body-spring-boot-starter    //  API接口加密,可以对返回值、参数值通过注解的方式自动加解密
       └── zhengcheng-knife4j-spring-boot-starter         // 整合 knife4j-spring-boot-starter(接口文档) 通用组件
       └── zhengcheng-leaf-spring-boot-starter            // 整合 Leaf:美团分布式ID生成服务 通用组件
       └── zhengcheng-mp-spring-boot-starter              // 整合 MyBatis-Plus 通用组件
       └── zhengcheng-oss-spring-boot-starter             // 整合 OSS SDK 通用组件
       └── zhengcheng-redis-cache-spring-boot-starter     // 整合 spring-boot-starter-data-redis spring-boot-starter-cache 通用组件
       └── zhengcheng-rocket-mq-spring-boot-starter       // 整合 RocketMQ SDK 通用组件  
       └── zhengcheng-web-spring-boot-starter             // 整合 spring-boot-starter-web 的 Web启动器
       └── zhengcheng-xxl-job-spring-boot-starter         // 整合 Leaf:美团分布式ID生成服务 通用组件
├──pom.xml                // [依赖] 公共依赖

CHANGELOG

[v6.1.1] 2023.01

  • 整理 zhengcheng-parent 项目的系统模块 ums cms frontend
  • Bumps hutool-core from 5.7.4 to 5.8.20.
  • 增加分布式锁的 lock4j

[v6.1.0] 2022.08

  • 增加幂等或防重复提交自定义注解 @Idempotent
  • 新增限流器 自定义注解 @RateLimiter
  • zc-rsa-encrypt-body-spring-boot-starter 升级为 zc-encrypt-body-spring-boot-starter, 支持AES/RSA
  • 采用ttl对相应的线程池进行包装(修改之前的漏洞)
  • 禁止直接引入 hutool-all 依赖,依照即取即用的原则引入依赖
  • json数据推荐使用jacksonfastjson2,而不要使用 fastjsonhutool-json 等第三方包

[v6.0.0] 2022.02.24

[v5.0.0] 2021.06.19

  • zc-core-spring-boot-starter迁移出zc-apollo-spring-boot-starter,支持各种配置中心
  • 升级zc-rocket-mq-spring-boot-starter,使用更便捷
  • elasticsearch-rest-high-level-client
    • 目前spring-data-elasticsearch底层采用es官方TransportClient,而es 官方计划放弃TransportClient,工具以es 官方推荐的RestHighLevelClient进行封装
    • 类似于Mybatis-Plus一样,能够极大简化java client API,并不断更新,让es更高级的功能更轻松的使用
    • 基于elasticsearch6.4.3版本进行开发
  • 默认使用mapstruct进行对象属性copy
  • 增加zc-rsa-encrypt-body-spring-boot-starter对接口入参及返回参加密解密(重要的数据,需要加密)
  • Alibaba Nacos替换Eureka注册中心
  • 配置中心默认使用apollo,并提供zc.apollo.refresh.name刷新指定bean
  • 去掉zc-feign-spring-boot-starter,改成zc-core-spring-boot-starter默认配置
  • zc-web-core-spring-boot-starter 改成 zc-core-spring-boot-starter,新征程微服务核心通用组件。
  • 去掉zc-auth-client-spring-boot-starter认证客户端通用组件。
  • 去掉zc-zk-spring-boot-starter在日常开发中,很少用到的通用组件。
  • 去掉zc-aliyun-spring-boot-starterzc-tencentcloud-spring-boot-starter等大而全的通用组件,后续按照业务需要提供组件。
  • 去掉zc-cat-spring-boot-starter,监控使用Apache SkyWalking
  • (重点)提高效率:引入MapStruct OrikaBean映射工具
  • BaseMessage 增加 timestamp,为消息幂等使用
  • 增加zc-tk-mybatis-spring-boot-starter ,集成MyBatis 通用 Mapper4
  • 修改zc-db-spring-boot-starterzc-mybatis-plus-spring-boot-starter ,在zc-web-spring-boot-starter 中去掉zc-db-spring-boot-starter等默认配置
  • redisson-spring-boot-starter使用示例文档

[v4.7.0] 2020.08.01

  • 修复全局Controller打印日志在异常的情况下无法打印的问题
  • Dubbo暴露服务的方式使用Feign
  • Alibaba Nacos 替换 Eureka 注册中心
  • 引入 spring cloud alibaba 依赖
  • commons-beanutils 升级到1.9.4,解决在Apache Commons Beanutils 1.9.2中,添加了一个特殊的BeanIntrospector类,该类允许抑制攻击者通过所有Java对象上可用的class属性访问类加载器的能力。但是,默认情况下,我们没有使用PropertyUtilsBean的特性。
  • mybatis-plus 升级到3.3.2

[v4.6.0] 2020.06.04

  • 使用EasyCode,一个字爽
  • 去掉全局返回值的封装,为feign的继承做准备
  • 增加com.zhengcheng.common.message.BaseMessage,消息可以继承此类,其中消息ID作用为防止重复消费
  • 去掉FeignAutoConfiguration中关于auth的配置,后续在网关处理用户登录授权,并传递用户信息的问题
  • zc-web-spring-boot-starter剔除zc-auth-client-spring-boot-starter ,单独引用;可以网关引入后,不需要在每个服务中单独调用(推荐)。
<dependency>
    <groupId>com.zhengcheng</groupId>
    <artifactId>zc-auth-client-spring-boot-starter</artifactId>
</dependency>
  • 修复GlobalResponseBodyAdvice 统一返回结果后,String的报错的问题
{
  "code": 500,
  "message": "系统升级中,请稍后重试!",
  "data": "com.zhengcheng.common.utils.Result cannot be cast to java.lang.String",
  "requestId": "6823280748b049109b0b0f40439c0265"
}
  • 设置返回数据的类型以及编码 produces = "application/json;charset=UTF-8",示例如下:
    @GetMapping(value = "/str", produces = "application/json;charset=UTF-8")
public String str(String v){
        // 经过压测,在吞吐量为157.3/sec 的情况下,被限流的比例为36.44%,符合预期
        return"测试";
        }
  • 去掉zc-redis-spring-boot-starterj2cache,如果需要用,则maven添加:
<dependency>
    <groupId>net.oschina.j2cache</groupId>
    <artifactId>j2cache-spring-boot2-starter</artifactId>
</dependency>
<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache-core</artifactId>
<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
    </exclusion>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </exclusion>
</exclusions>
</dependency>
  • 增加RedissonAutoConfiguration配置,增加RedissonDistributedRLock的配置
  • zc-redis-spring-boot-starter 更名为 zc-cache-spring-boot-starter

[v4.5.0] 2020.5.22

  • 增加 GlobalResponseBodyAdvice 统一返回结果处理
  • 增加ZkDistributedLock zk分布式锁
  • 增加zc-zk-spring-boot-starter Zookeeper通用组件
  • j2cache-spring-boot2-starter
  • 增加zc-dict-spring-boot-starter 数据字典通用组件,架构设计
  • 内存级缓存 Springboot2.x 使用 Caffeine
  • 修改RedisTemplate<String, Object> value的序列化方式(不兼容老版本,有可能出现value反序列化异常)

[v4.4.0] 2020.5.7

  • 增加RequestLimit注解,实现接口访问量控制
  • CuratorDistributedLock RedisBloomFilter BloomFilterHelper 即将作废
  • SignAuthInterceptor 简化对接成本;
  • 增加 SignAuthUtils 工具类
  • zc-feign-spring-boot-starter 远程通信通用组件,默认配置中增加SignAuth的参数,详细见com.zhengcheng.feign.FeignAutoConfiguration ,其中默认的秘钥为:security.api.key,请在配置文件中写入秘钥,默认为 zhengcheng

技术分享 API接口防止参数篡改和重放攻击

  • 删除 FeignInterceptorConfig , 默认配置中增加 Feign OAuth2 拦截器
  • TraceIdInterceptor 增加 applicationName 构造参数,修复无法打印项目名的问题
  • 最终一致性的实现方案

[v4.3.0] 2020.4.18

  • 新增ExecutorMdcTaskBuilder ({@link ThreadPoolTaskExecutor} 建造者) 打印MDC的线程池任务建造者
  • 删除zc-async-spring-boot-starter,异步线程池的配置简化并交给开发者
  • Feign日志打印成INFO,方便线上问题定位
  • 增加MDC链路traceId,返回值也增加request_id,方便线上问题定位,参考腾讯云
  • zc-web-springboot-starter 聚合通用组件,定制化Springboot2.x 开发的最小框架支持 ,Sample项目
  • 接口签名校验,例如微信支付接口的签名校验 SignAuthInterceptor
  • 去掉 WebAutoConfiguration@EnableApolloConfig的配置,交给开发者自主选择
  • 去掉 apollo 配置中心依赖包,交给开发者自主选择
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
</dependency>
  • 去掉 VI 依赖包,交给开发者自主选择
<dependency>
    <groupId>com.ctrip.framework</groupId>
    <artifactId>cornerstone</artifactId>
</dependency>
  • 去掉 eureka-client,交给开发者自主选择(@EnableEurekaClient)
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

微信开发工具升级 3.7.0 微信开发 Java SDK(开发工具包)

  • hutool 升级到 5.3.2
  • 增加PageResult 分页结果
  • 增加 feign 重试,只会对GET请求重试,提高系统的可用性

[v4.1.0] 2020.4.11

  • SpringCloud 升级到 Greenwich.SR4
  • SpringBoot 升级到 2.1.11.RELEASE
  • fastjson 升级 1.2.68,SpringBoot 使用默认的 jacksonfastjson总是有安全的漏洞,需要升级,所以重要的地方舍弃使用。
  • SpringBoot jackson 的配置如下:
spring:
  jackson:
    #参数意义:
    #JsonInclude.Include.ALWAYS              默认
    #JsonInclude.Include.NON_DEFAULT     属性为默认值不序列化
    #JsonInclude.Include.NON_EMPTY         属性为 空(””) 或者为 NULL 都不序列化
    #JsonInclude.Include.NON_NULL           属性为NULL   不序列化
    default-property-inclusion: ALWAYS
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
  • 去掉 MobileMask 注解
  • 取消 feign 重试
  • 增加分页返回结果 PageInfo
  • 修改 Event 为组合 Component 的注解
  • 新增 RocketmqListener 的注解,可以直接在方法上,减少代码中Class的个数

[v3.19.0] 2020.4.10

  • 其他

License

zhengcheng is under the Apache 2.0 license. See the Apache License 2.0 file for details.

About

zhengcheng是一个基于SpringBoot的框架支持项目,只需简单配置,即可快速接入各种通用组件,从而节省大量时间,让我们在开发业务时能够专注于业务的编写而不必过多的关注框架的配置,并且可以促进团队合作,降低维护成本,减少低级BUG,有助于代码审查。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published