# ecloud-micro-cloud
**Repository Path**: Hubert_Huang_Test/ecloud-micro-cloud
## Basic Information
- **Project Name**: ecloud-micro-cloud
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: devlop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-01-17
- **Last Updated**: 2023-01-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## :mega: 框架介绍
如果您觉得有帮助,请点右上角 "Star" 支持一下谢谢
这是一款基于Spring Cloud Alibaba的微服务架构。旨在为公司提供技术框架的基础通用能力的封装,减少开发工作,让您只关注业务逻辑。最大可能减少开发成本,让技术变得简单,把难的都留给架构。结合相应的代码规范可以发挥出框架的极致性能。
## :dart: 核心组件
| 核心中间件 | 当前版本 |
| -------------------- | ------------------------------------------------------------ |
| Spring Boot |
|
| Spring Cloud |
|
| Spring Cloud Alibaba |
|
| Nacos |
|
| Sentinel |
|
## :link: 框架说明
主体框架:采用最新的`Spring Cloud 2020.0.3`, `Spring Boot 2.5.4`, `Spring Cloud Alibaba 2021.1`版本进行系统设计。
注册发现:采用`Nacos`做为服务的配置中心和注册中心,实现多配置、分群组、分命名空间、多业务模块的注册和发现功能。
统一网关:采用最新的`Spring Cloud Gateway`作为系统服务网关,支持动态路由配置、支持负载均衡策略、支持统一鉴权、集成Sentinel支持限流降级和动态规则配置及持久化,非业务控制变更均可免重启,网关做为微服务所有请求的入口能更有效的保障其稳定性。
统一监控:利用`Spring Boot Admin`可以实现对整套微服务的一个监控,界面美观简洁,性能优异。支持对路由管理、缓存管理、类实例监控、服务状态及配置监控等,功能齐全。适合技术对整个微服务进行统一管理、监控。
熔断降级:采用阿里`Sentinel`实现服务间的熔断降级等功能,避免服务之间出现雪崩,实现动态规则持久化等功能(基于`Nacos`),`Sentinel`经过淘宝双十一历年考验,性能强悍、生态齐全、可移植性极强。
动态数据源:基于`Spring`底层接口自研,全自主可控,并完美对接`Spring`的事务管理器(Mybatis已完成,JPA计划中),支持`Spring`原生声明式事务内数据源切换及事务控制,可做到进程内多数据源的事务同一控制,极大减少了SaaS架构下对分布式事务的依赖,注解式使用,支持SpEL表达式及HTTP头信息、参数信息及Session参数,除了注解真正的零编码,比Mybatis Plus 多数据源更强,自动装配,支持任意数据源注入。
代码生成:基于模板引擎和动态数据源实现一套在线的代码生成工具,支持多库多表单表代码生成,集成在线代码编辑器可在线编辑内置模板,打造属于自己的代码模板,支持配置和模板的持久化功能、支持DTO、VO、Convert(模型层转换工具基于mapstruct,性能最强不解释)层代码自动生成,后期计划生成前端代码。
二级缓存:重写Spring Cache底层实现,采用Redis+Caffeine实现分布式二级缓存,完美对接Spring Cache,支持Spring注解、支持L1、L2单独独立模式。利用`Redis`Pub/Sub模式解决分布式缓存的数据一致性同步问题(L2缓存更新或清除L1节点不同步更新),自动装配,零配置
国际化:全系统任意组件均支持动态国际化(网关、Bean校验、业务提示语),支持基于Bean属性注解的数据国际化,可自定义国际化数据源,基于序列化实现结合二级缓存性能强悍,几乎性能无损。
滑动验证码:内置图片滑动验证码功能,全后端抠图,支持默认资源自定义资源注入,采用Base64输出,支持自动装配零配置。
## :pencil2: 框架设计

## :file_folder: 工程结构
```java
ecloud-micro-cloud -- 父项目,各模块分离,方便集成和微服务
│ ├─ecloud-common -- 核心通用模块,主模块
│ │ ├─ecloud-common-base -- 封装通用模块
│ │ ├─ecloud-common-cache -- 封装二级缓存模块
│ │ ├─ecloud-common-data -- 封装多数据源模块
│ │ ├─ecloud-common-utils -- 封装通用工具模块
│ │ ├─ecloud-common-vcode -- 封装滑动验证码模块
│ │ ├─ecloud-common-sms -- 封装短信模块(计划中)
│ │ ├─ecloud-common-mail -- 封装邮件模块(计划中)
│ │ ├─ecloud-common-auth -- 封装认证模块(计划中)
│ │ ├─ecloud-common-dubbo -- 封装dubbo基础模块(待定)
│ │ ├─ecloud-common-gray -- 封装灰度发布基础模块(计划中)
│ │ ├─ecloud-common-oss -- 封装OSS基础模块(实现中)
│ │ ├─ecloud-common-mongodb -- 封装MongoDB数据库模块(计划中)
│ │ ├─ecloud-common-job -- 封装定时任务模块(实现中)
│ │ ├─ecloud-common-web -- 封装通用WEB模块
│ │─ecloud-gateway -- 统一网关模块 [8080]
│ │─ecloud-service -- 业务服务模块
│ │ ├─ecloud-service-openapi -- 系统模型通用模块,供其他模块引用
│ │ │ ├─ecloud-openapi-security -- 权限模块模型,供其他模块引用
│ │ │ ├─ecloud-openapi-translate -- 翻译模块模型,供其他模块引用
│ │ ├─ecloud-service-service -- 业务服务模块
│ │ │ ├─ecloud-service-security -- 权限服务 [20010]
│ │ │ ├─ecloud-service-translate -- 翻译服务 [20020]
│ │─ecloud-support -- 支持中心项目,目前包括代码生成和监控模块
│ │ ├─ecloud-support-generator -- 在线代码生成服务 [8068]
│ │ ├─ecloud-support-monitor -- 在线微服务集群监控 [8088]
```
## :camera: 部分截图
## :green_book: 核心教程
### 一、基础项目搭建
1. 新建一个WEB项目,只需要在pom.xml引入ecloud-common-web模块,即可拥有动态数据源、自动国际化、自动参数完整性校验、`Jackson`序列化(支持`LocalDateTime`系列)、全局异常处理等功能。而你只需要配置多数据源即可使用。
```xml
com.ecloud
ecloud-common-web
${ecloud.cloud.version}
```
2. 多数据源的配置可参考如下配置,其中`/* TODO 这里处理多数据源动态注册 */`这里可以实现动态数据源的注入,你可以根据自己的实际情况实现,例如从文件、从数据库查询注入。而其中的参数`key`就是你数据源的标识。
```java
/**
* 数据库连接池配置
*
* @author LiuGangQiang Create in 2020/03/02
*/
@Configuration
public class DataSourceConfiguration {
/**
* 主数据源配置
*
* @author LiuGangQiang Create in 2021/04/27
* @return {@link DataSource}
*/
@Primary
@Bean(DynamicDataSource.MASTER)
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public DataSource masterDataSource() {
HikariDataSource dataSource = new HikariDataSource();
return dataSource;
}
/**
* 读取动态数据源配置
*
* @author LiuGangQiang Create in 2021/05/01
* @return {@link HikariConfig}
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.dynamic")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
/**
* 动态数据源配置
*
* @author LiuGangQiang Create in 2021/04/27
* @return {@link DataSource}
*/
@Bean
public DynamicDataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource() {
@Override
public DataSource registerDataSource(String key) {
if (StringUtils.isNotBlank(key)) {
/* TODO 这里处理多数据源动态注册 */
}
return null;
}
};
Map