1 Star 16 Fork 7

学习教程 / SpringCloud-multiple-gradle

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MulanPSL-2.0

Eric-Dream

=== 本工程承担日常实验的作用,任何先行的尝试都在这里实践与落地。成熟的方案设计会在 [base-server](https://gitee.com/aohanhongzhi/springboot-base) 里面落地到生产。

本项目是基于Gradle构建的多模块SpringCloud工程。采用传统线程模型 的SpringWeb框架,mybatis-plus和mysql官方驱动。非常适合入门者学习。本项目的一大亮点就是自定义枚举序列化的处理

主要实现功能如下

功能 实现 用途
IDEA开发热加载实现 JBR + HotswapAgent https://github.com/HotswapProjects/HotswapAgent
jackson序列化 自定义序列化器 BaseEnumSerializer.java 解决参数枚举的序列化问题
logback钉钉通知 自定义Appender LogbackDingTalkAppender.java Error消息及时通知
logback邮件通知 默认支持 Error异常及时通知
全局异常捕获 GlobalExceptionHandler.java 捕获异常
数据库字段加解密 参考CustomTypeHandler 给部分数据库字段加解密
执行初始化SQL语句 自动建表
MybatisPlus的SQL脚本自动维护 https://baomidou.com/pages/1812u1/ 自动建表
SpringBoot 3.0 声明式API远程调用 参考 RemoteApi
参数全局trim() StringTrimDeserializer 避免异常数据
Long类型超长转String BaseLongSerializer.java 解决前端无法正确显示超长String
前端null传到后端成"null"字符串 StringToStringConverter 解决字符串"null"等问题
敏感信息从程序外配置文件读取 RemoteEnvironmentPostProcessor.java 极海的方案 DataSourceConfigLoader.java 从程序外的配置文件读取数据库的账号密码信息
单元测试默认配置环境 @ActiveProfiles("test") 解决每次修改yaml文件的烦恼

具体框架如下表:

jdk下载

https://www.azul.com/

热加载技术

这个针对的是Jetbrains Runtime ,所以其他JDK慎重。实际测试jdk17 21都可以正常运行。

https://github.com/HotswapProjects/HotswapAgent

-XX:+AllowEnhancedClassRedefinition -XX:HotswapAgent=fatjar

img_1.png

img.png

注意需要在debug模式下启动才能生效。

修改代码后,Build -> Rebuild Project (Ctrl + Shift + F9) 重新编译和加载修改的类文件即可生效。

http://blog.houxiaoyi.cn/#/src/Java/%E7%83%AD%E5%8A%A0%E8%BD%BD

执行初始化的sql语句

有两种方案。一种借助与mybatis-plus 另一种就是mybatis的

基于mybatis的sql执行方案

hxy.dream.common.init.ApplicationStartupRunner

基于mybatis-plus的sql执行方案

基于mybatis-plus配置直接执行

https://www.baomidou.com/pages/226c21/#%E9%85%8D%E7%BD%AE

# DataSource Config
spring:
  datasource:
    driver-class-name: org.h2.Driver
    username: root
    password: test
  sql:
    init:
      schema-locations: classpath:db/schema-h2.sql
      data-locations: classpath:db/data-h2.sql
基于mybatis-plus的sql执行方案

hxy.dream.common.init.MysqlDdl

OpenFeign要退出历史舞台了

推荐 RestTemplate或者WebClient

WebClient 声明式的API调用: RemoteApiConfig

structure

eric-dream
├── app --微服务注册与发现中心
├── common -- 微服务系统管理与调试
    ├── manager -- 第三方服务调用
├── entity -- 实体
├── common -- 公共,配置文件,脚手架等
└── dao -- 数据持久层

上面后缀server是服务治理模块。platform是业务应用模块。 微服务=分布式开发+服务治理

gradle安装与配置

https://github.com/GradleCN/GradleSide

如果IDEA自动下载gradle很慢。那么可以先提前安装好gradle,然后指定下安装目录即可。 img.png

腾讯的代理镜像

https://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zip

https://services.gradle.org/distributions/gradle-7.4-bin.zip

img_1.png

技术 说明 官网
Spring Boot 容器+MVC框架 https://spring.io/projects/spring-boot
Gradle 项目构建工具 https://gradle.com/
Spring Security 认证和授权框架 https://spring.io/projects/spring-security
MyBatis ORM框架 http://www.mybatis.org/mybatis-3/zh/index.html
MyBatisPlus ORM框架补充 https://mybatis.plus/
MyBatisGenerator 数据层代码生成 http://www.mybatis.org/generator/index.html
Swagger-UI 文档生产工具 https://github.com/swagger-api/swagger-ui
Hibernator-Validator 验证框架 http://hibernate.org/validator/
Elasticsearch 搜索引擎 https://github.com/elastic/elasticsearch
RabbitMq 消息队列 https://www.rabbitmq.com/
Redis 分布式缓存 https://redis.io/
redisson 分布式锁,布隆过滤器 https://github.com/redisson/redisson
MongoDb NoSql数据库 https://www.mongodb.com/
Docker 应用容器引擎 https://www.docker.com/
Hikari SpringBoot默认数据库连接池 https://github.com/brettwooldridge/HikariCP
Druid 数据库连接池 https://github.com/alibaba/druid
JWT JWT登录支持 https://github.com/jwtk/jjwt
LogStash 日志收集 https://github.com/logstash/logstash-logback-encoder
Lombok 简化对象封装工具 https://github.com/rzwitserloot/lombok
loc 代码行数统计 https://github.com/cgag/loc
ko-time 轻量级的springboot项目性能分析工具,通过追踪方法调用链路以及对应的运行时长快速定位性能瓶颈 https://gitee.com/huoyo/ko-time

SpringBoot支持

https://spring.io/projects/spring-boot#support

命令打包,跳过TEST

./gradlew clean bootJar -x test
./gradlew  bootRun -x test
./gradlew dependencyInsight --dependency mybatis

构建

并行构建

gradle build -x test --parallel --build-cache 

需要解决多工程的依赖分析

gradle多模块构建,依赖关系解决

 api project(':dao') 

以下是 gradle6前后的使用方式:

//    implementation的依赖是不可以传递的而,entity需要被app依赖,所以需要加上
//    implementation project(':entity') /* 子模块之间的依赖 */
compile project(':entity') /* 子模块之间的依赖 */
  1. 如何使用Gradle管理多模块Java项目

版本指定,类似dependencyManager

docker自动化跑起来

google出品的一个插件,可以直接将SpringBoot构建推送到Docker仓库

    id "com.google.cloud.tools.jib" version "2.0.0"

统一Long类型序列化

方案1

BaseLongSerializer.java

方案2

https://mp.weixin.qq.com/s/qhG9T0VdW4VkVy2VJJmftg

import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

@Configuration
public class JacksonConfiguration {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            // 把 Long 类型序列化为 String
            builder.serializerByType(Long.class, ToStringSerializer.instance);
        };
    }
}

前端JS内置的number类型是基于32位整数,Number类型的最大安全整数为9007199254740991,当Java Long型的值大小超过JS Number的最大安全整数时,超出此范围的整数值可能会被破坏,丢失精度。

解决办法就是后端将超过精度的Long和long类型转成String给前端展示即可。

JSON类库Jackson优雅序列化Java类

统一序列化枚举

https://juejin.im/post/6844904196693557255 统一序列化的核心在于重写序列化器。但是粒度就需要好好控制了,是序列化所有的枚举类,还是只处理自己写的枚举类。 本项目是只处理自己写的枚举类,其方式是让所有自己写的枚举必须实现统一的BaseEnum接口。在一些团队合作的大项目里, 可能这种规范并不会被所有人认可,所以也可以用限制包的方式,自己配置指定包的枚举可以被统一处理。

Controller层

入参
表单提交

json

参考:Spring Boot 使用枚举类型作为请求参数

现在的问题在于jackson将枚举反序列化的时候需要使用code而不是ordinal。显然之前的Convert在这里貌似并没有什么作用。因为这里基本上全部靠jackson来序列化。

返回

参考:JSON类库Jackson优雅序列化Java枚举类

如果发生无法正常解析的时候,那么可能是注入的bean无法使用

如果发现注入的bean无法解决json序列化问题,那么可以在BaseEnum加上这个注解

@JsonFormat(shape = JsonFormat.Shape.OBJECT)

ORM层

参考 mybatis-plus官网

  1. 自动填充字段

总结

通过上面方法,对数据库层和Controller层的转换操作,可以很好的处理枚举在应用中的形态,程序中可以很好的使用枚举了。

自定义date的序列化器

https://blog.csdn.net/bandancer/article/details/84926383

基于fastjson在mvc中解决enum类型序列化反序列化

过滤器

关于springboot中添加Filter的方法

WARN  at com.zaxxer.hikari.pool.PoolBase.isConnectionAlive (PoolBase.java:184) - HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@63ec6a5a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.

全局异常捕获

这个可以去掉满屏的try catch ,还可以结合事务。

https://blog.csdn.net/qq_27127145/article/details/85775240

数据库字段加解密

MybatisPlus数据库加解密 参考CustomTypeHandler

https://blog.csdn.net/u012954706/article/details/105437768

封装类型与基础类型

  1. 所有POJO类属性必须使用包装数据类型
  2. 所有的局部变量使用基本数据类型。

来自 《阿里巴巴Java开发规范》

TODO

  • 有的前端输入带有空格或者换行,到数据库存储可能会发生意想不到的bug,所以需要在反序列化的时候,需要将其中的非法字符去掉。需要设计一个方案做下全局的参数trim()

https://zhuanlan.zhihu.com/p/372585663

木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

简介

SpringBoot +Gradle构建的多模块项目工程,自定义序列化与反序列化 展开 收起
Java
MulanPSL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/eric-tutorial/SpringCloud-multiple-gradle.git
git@gitee.com:eric-tutorial/SpringCloud-multiple-gradle.git
eric-tutorial
SpringCloud-multiple-gradle
SpringCloud-multiple-gradle
springboot3.0

搜索帮助