203 Star 1.3K Fork 681

zhoutaoo / SpringCloud

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
readme.md
Apache-2.0

Build Status License codecov

根据前期的使用和反馈,目前将脚手架整体进行了重构,发布了新的框架 Opensabre,当前仓库代码暂停维护,请使用新版

开放源码: https://github.com/opensabre/opensabre-framework

在线文档: 在线文档

进群交流: 进群交流

架构特点

1. 统一Restful的响应报文,controll返回原始类型即可,无需手动包装,简化代码,可读性更好。

2. 统一异常处理,封装了基本的异常的响应,如参数检验、文件上传等。简化代码,更方便扩展。

3. 默认集成Swagger 3.0 API文档,方便接口文档的传递、协作与调试。

4. 标准化WEB对象传递/转换/使用,方便统一开发风格,简化操作。

5. 框架/环境等元数据自动收集注册至properties和Nacos,方便系统运行时作为扩展判断,信息处理。

6. 系统启动时自动收集所有Restful url注册到权限资源,方便进行集中权限管理和授权使用。

7. 多机房/双活路由负载扩展支持,自定义路由和负载规则,更灵活、可控。

8. 默认引入spring validation,并扩展枚举、手机号等常用校验注解。

9. 默认引入日志trace、actuator等组件,统一日志打印格式。

10. 整体系统化为三层,framework框架、framework组件、基础应用,层次更清楚,结构更合理。

11. 配置中心,划分框架全局配置与应用配置(熔断降级、网关路由),规划中。

快速开始

先决条件

首先本机先要安装以下环境,建议先学习了解springboot和springcloud基础知识。

开发环境搭建

linux和mac下可在项目根目录下执行 ./install.sh 快速搭建开发环境。如要了解具体的步骤,请看如下文档。

具体步骤如下:

  1. 克隆代码库: git clone https://github.com/zhoutaoo/SpringCloud.git

  2. 安装公共库到本地仓库:

mvn -pl ./common,./auth/authentication-client install

  1. 生成ide配置: mvn idea:ideamvn eclipse:eclipse 并导入对应的ide进行开发,IDE安装lombok插件(很重要,否则IDE会显示编译报错)

编译 & 启动

  • 1.启动基础服务:进入docker-compose目录,执行docker-compose -f docker-compose.yml up 或单个启动docker-compose up 服务名, 服务名如下

在启动应用之前,需要先启动数据库、缓存、MQ等中间件,可根据自己需要启动的应用选择启动某些基础组件,一般来说启动mysql、redis、rabbitmq即可,其它组件若有需要,根据如下命令启动即可。

该步骤使用了docker快速搭建相应的基础环境,需要你对docker、docker-compose有一定了解和使用经验。也可以不使用docker,自行搭建以下服务即可。

服务 服务名 端口 备注
数据库 mysql 3306 目前各应用共用1个实例,各应用可建不同的database
KV缓存 redis 6379 目前共用,原则上各应用单独实例
消息中间件 rabbitmq 5672 共用
注册与配置中心 nacos 8848 启动和使用文档
日志收集中间件 zipkin-server 9411 共用
搜索引擎中间件 elasticsearch 9200 共用
日志分析工具 kibana 5601 共用
数据可视化工具 grafana 3000 共用
  • 2.创建数据库及表

只有部分应用有数据库脚本,若启动的应用有数据库的依赖,请初使化表结构和数据后再启动应用。

docker方式脚本初使化:进入docker-compose目录,执行命令 docker-compose up mysql-init

子项目脚本

路径一般为:子项目/db

如:auth/db 下的脚本,请先执行ddl建立表结构后再执行dml数据初使化

应用脚本

路径一般为:子项目/应用名/src/main/db

如:demos/producer/src/main/db 下的脚本

  • 3.启动应用

根据自己需要,启动相应服务进行测试,cd 进入相关应用目录,执行命令: mvn spring-boot:run

以下应用都依赖于rabbitmq、nacos,启动服务前请先启动mq和注册中心

服务分类 服务名 依赖基础组件 简介 应用地址 文档
center bus-server 消息中心 http://localhost:8071 消息中心文档
sysadmin organization mysql、redis 用户组织应用 http://localhost:8010 待完善
auth authorization-server mysql、organization 授权服务 http://localhost:8000 权限服务简介授权server文档
auth authentication-server mysql、organization 认证服务 http://localhost:8001 认证server文档
auth authentication-client 认证客户端 jar包引入
gateway gateway-web redis WEB网关 http://localhost:8443 WEB网关简介 WEB网关文档
gateway gateway-admin mysql、redis 网关管理 http://localhost:8445 网关管理后台文档
monitor admin 总体监控 http://localhost:8022
  • 4.案例示意图

以下是一个用户访问的的示意图,用户请求通过gateway-web应用网关访问后端应用,通过authorization-server应用登陆授权换取token,请求通过authentication-server应用进行权限签别后转发到"您的业务应用"中

authorization-server为授权应用,启动前请初使化好数据库,授权Server文档

authentication-server为签权应用,若有新增接口,请初使化相关权限数据到resource表中。

gateway-admin可动态调整gateway-web的路由策略,测试前请先配置网关的转发策略,路由策略配置

示意图

  • 6.前端项目

确确保gateway-admin、gateway-web、organization、authorization-server、authentication-server服务启动,然后启动

前端项目(该项目目前还在开发中)

大家启动如有问题,可以先到这里看看,也可以加入交流群

常见问题

测试

运行 mvn test 启动测试.

架构与开发

架构

开发指南

开发指南

功能与特性

功能预览

用户管理 用户管理

角色管理 角色管理

服务容错 服务容错

API文档 API文档

组织架构管理 组织架构管理

基础服务

服务 使用技术 进度 备注
注册中心 Nacos
配置中心 Nacos
消息总线 SpringCloud Bus+Rabbitmq
灰度分流 OpenResty + lua 🏗
动态网关 SpringCloud Gateway 多种维度的流量控制(服务、IP、用户等),后端可配置化🏗
授权认证 Spring Security OAuth2 Jwt模式
服务容错 SpringCloud Sentinel
服务调用 SpringCloud OpenFeign
对象存储 FastDFS/Minio 🏗
任务调度 Elastic-Job 🏗
分库分表 Mycat 🏗
数据权限 🏗 使用mybatis对原查询做增强,业务代码不用控制,即可实现。

平台功能

服务 使用技术 进度 备注
用户管理 自开发 用户是系统操作者,该功能主要完成系统用户配置。
角色管理 自开发 角色菜单权限分配、设置角色按机构进行数据范围权限划分。
菜单管理 自开发 🏗 配置系统菜单,操作权限,按钮权限标识等。
机构管理 自开发 🏗 配置系统组织机构,树结构展现,可随意调整上下级。
网关动态路由 自开发 🏗 网关动态路由管理

开发运维

服务 使用技术 进度 备注
代码生成 🏗 前后端代码的生成,支持Vue
测试管理 🏗
文档管理 Swagger2
服务监控 Spring Boot Admin
链路追踪 SkyWalking
操作审计 🏗 系统关键操作日志记录和查询
日志管理 ES + Kibana、Zipkin
监控告警 Grafana

更新日志

2019-10-18:

1.使用nacos替代eureka为服务的注册中心

2.使用nacos替代apollo为服务的配置中心

3.引入使用sentinel替换掉hystrix,引入sentinel-dashboard

4.使用jetcache作两级缓存,优化缓存性能

5.网关启动时加载数据库中的路由到redis缓存

6.其它已知bug修复

联系交流

加入贡献代码

请入群 请戳这里 加群主微信。

请作者喝饮料

如果你觉的有帮助到您,可以请作者喝饮料,这样更有动力,谢谢。

学习交流

EMail:zhoutaoo@foxmail.com

群1、2、3、4、5、6、7、8、9已满,请加群10,加群请戳这里

此些群仅为技术交流群,请大家不要讨论政治、发广告等与技术无关的东西。大家如若有问题可以在群里直接发问,我会抽空答复。

请大家问问题时尽量描述清楚背景与问题关键信息,描述的越清楚越容易得到答案。也更容易判断问题可能点,节省判断的时间,而不用来回问答。

同时也鼓励群友们积极回复已知的问题,大家相互帮助共同成长。如有bug或新需求也可以直接提交issue到github,我会酌情处理。

如果你发现你的问题很久都没有人答复,那很有可能就是问题描述的不够清楚,别人无法回复。

问问题的三要素

  1. 说明背景,使用了哪个模块,要做什么?

  2. 怎么输入或操作的得到了什么结果? 截图,日志

  3. 哪里不明白或有什么疑问 ?

Stargazers over time

Stargazers over time

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。持续更新中 expand collapse
Java and 4 more languages
Apache-2.0
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
Java
1
https://gitee.com/toopoo/SpringCloud.git
git@gitee.com:toopoo/SpringCloud.git
toopoo
SpringCloud
SpringCloud
master

Search

F2647f8d 8189591 Bbdfb06e 8189591