服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 一款不错的SpringCloud 脚手架项目

一款不错的SpringCloud 脚手架项目

2021-12-23 23:25Java知音 Java教程

我自己搭建一个全新spingCloud框架,里面所有组件可插拔的,集成多个组件供大家选择,喜欢哪个用哪个。

之前接个私活,在网上找了好久没有找到合适的框架,不是版本低没人维护了,在不就是组件相互依赖较高。所以我自己搭建一个全新spingCloud框架,里面所有组件可插拔的,集成多个组件供大家选择,喜欢哪个用哪个

一、系统架构图

一款不错的SpringCloud 脚手架项目

二、快速启动

1.本地启动nacos: http://127.0.0.1:8848

  1. sh startup.sh -m standalone 

2.本地启动sentinel: http://127.0.0.1:9000

  1. nohup java -Dauth.enabled=false -Dserver.port=9000 -jar sentinel-dashboard-1.8.1.jar & 

3.本地启动zipkin: http://127.0.0.1:9411/

  1. nohup java -jar zipkin-server-2.23.2-exec.jar & 

三、项目概述

  •  springboot+springcloud
  •  注册中心:nacos
  •  网关:gateway
  •  RPC:feign

以下是可插拔功能组件

  •  熔断降级:sentinel
  •  全链路跟踪:sleth+zipkin
  •  分布式事务:seata
  •  封装功能模块:全局异常处理、日志输出打印持久化、多数据源、鉴权授权模块、zk(分布式锁和订阅者模式)
  •  maven:实现多环境打包、直推镜像到docker私服。

这个项目整合了springcloud体系中的各种组件。以及集成配置说明。同时将自己平时使用的功能性的封装以及工具包都最为模块整合进来。可以避免某些技术点长时间不使用后的遗忘。

另一方面现在springboot springcloud 已经springcloud-alibaba的版本迭代速度越来越快。

为了保证我们的封装和集成方式在新版本中依然正常运行,需要用该项目进行最新版本的适配实验。这样可以更快的在项目中集合工程中的功能模块。

四、项目预览

一款不错的SpringCloud 脚手架项目

一款不错的SpringCloud 脚手架项目

一款不错的SpringCloud 脚手架项目

一款不错的SpringCloud 脚手架项目

一款不错的SpringCloud 脚手架项目

五、新建业务工程模块说明

由于springboot遵循 约定大于配置的原则。所以本工程中所有的额类都在的包路径都在com.cloud.base下。

如果新建的业务项目有规定使用指定的基础包路径则需要在启动类增加包扫描注解将com.cloud.base下的所有类加入到扫描范围下。

  1. @ComponentScan(basePackages = "com.cloud.base"

如果可以继续使用com.cloud.base 则约定将启动类放在该路径下即可。

六、模块划分 

  1. 父工程:  
  2. cloud-base - 版本依赖管理  <groupId>com.cloud</groupId>  
  3.  
  4. |--common - 通用工具类和包  <groupId>com.cloud.common</groupId>  
  5. |   |  
  6. |   |--core-common  通用包 该包包含了SpringMVC的依赖,会与WebFlux的服务有冲突  
  7. |   |  
  8. |   |--core-exception 自定义异常和请求统一返回类  
  9.  
  10. |--dependency - 三方功能依赖集合 无任何实现 <groupId>com.cloud.dependency</groupId>  
  11. |   | 
  12. |   |--dependency-alibaba-cloud 关于alibaba-cloud的依赖集合  
  13. |   |  
  14. |   |--dependency-mybatis-tk 关于ORM mybatis+tk.mybatis+pagehelper的依赖集合  
  15. |   |  
  16. |   |--dependency-mybatis-plus 关于ORM mybatis+mybatis—plus+pagehelper的依赖集合  
  17. |   |  
  18. |   |--dependency-seata 关于分布式事务seata的依赖集合  
  19. |   |  
  20. |   |--dependency-sentinel 关于流控组件sentinel的依赖集合  
  21. |   | 
  22. |   |--dependency-sentinel-gateway 关于网关集成流控组件sentinel的依赖集合(仅仅gateway网关使用该依赖)  
  23. |   |  
  24. |   |--dependency-sleuth-zipkin 关于链路跟踪sleuth-zipkin的依赖集合  
  25.  
  26. |--modules - 自定义自实现的功能组件模块 <groupId>com.cloud.modules</groupId>  
  27. |   |  
  28. |   |--modules-logger 日志功能封装  
  29. |   |  
  30. |   |--modules-multi-datasource 多数据功能封装  
  31. |   |  
  32. |   |--modules-lh-security 分布式安全授权鉴权框架封装  
  33. |   |  
  34. |   |--modules-youji-task 酉鸡-分布式定时任务管理模块  
  35. |   |  
  36.  
  37. |     
  38. |     
  39. | 以下是独立部署的应用 以下服务启动后配合前端工程使用 (cloud-base-angular-admin)  
  40.  
  41. |--cloud-gateway  应用网关  
  42.  
  43. |--authorize-center 集成了modules-lh-security 的授权中心,提供统一授权和鉴权  
  44. |     
  45. |--code-generator 代码生成工具  
  46.  
  47. |--user-center 用户中心 提供用户管理和权限管理的相关服务  
  48.  
  49. |--youji-manage-server 集成了modules-youji-task 的定时任务管理服务端 

七、版本使用说明 

  1. <springboot.version>2.4.2</springboot.version>  
  2. <springcloud.version>2020.0.3</springcloud.version>  
  3. <springcloud-alibaba.version>2021.1</springcloud-alibaba.version> 

八、多环境打包说明

在需要独立打包的模块resources资源目录下增加不同环境的配置文件

  1. application-dev.yml  
  2. application-test.yml 
  3. application-prod.yml 

修改application.yml

  1. spring:  
  2.   profiles:  
  3.     active: @profileActive@ 

在需要独立打包的模块下的pom文件中添加一下打包配置。

  1. <build>  
  2.     <plugins>  
  3.         <plugin>  
  4.             <groupId>org.springframework.boot</groupId>  
  5.             <artifactId>spring-boot-maven-plugin</artifactId>  
  6.             <version>${springboot.version}</version>  
  7.             <configuration>  
  8.                 <fork>true</fork>  
  9.                 <addResources>true</addResources>  
  10.             </configuration>  
  11.             <executions>  
  12.                 <execution>  
  13.                     <goals>  
  14.                         <goal>repackage</goal>  
  15.                     </goals>  
  16.                 </execution>  
  17.             </executions>  
  18.         </plugin>  
  19.         <plugin>  
  20.             <groupId>org.apache.maven.plugins</groupId>  
  21.             <artifactId>maven-resources-plugin</artifactId>  
  22.             <configuration>  
  23.                 <delimiters>  
  24.                     <delimiter>@</delimiter>  
  25.                 </delimiters>  
  26.                 <useDefaultDelimiters>false</useDefaultDelimiters>  
  27.             </configuration>  
  28.         </plugin>  
  29.     </plugins>  
  30.     <resources>  
  31.         <resource>  
  32.             <directory>src/main/resources</directory>  
  33.             <filtering>true</filtering>  
  34.         </resource>  
  35.     </resources>  
  36. </build>  
  37. <profiles>  
  38.     <profile>  
  39.         <id>dev</id>  
  40.         <activation>  
  41.             <activeByDefault>true</activeByDefault>  
  42.         </activation>  
  43.         <properties>  
  44.             <profileActive>dev</profileActive>  
  45.         </properties>  
  46.     </profile>  
  47.     <profile>  
  48.         <id>test</id>  
  49.         <properties>  
  50.             <profileActive>test</profileActive>  
  51.         </properties>  
  52.     </profile>  
  53.     <profile>  
  54.         <id>prod</id>  
  55.         <properties>  
  56.             <profileActive>prod</profileActive>  
  57.         </properties>  
  58.     </profile>  
  59. </profiles> 

mvn打包命令

  1. # 打开发环境  
  2. mvn clean package -P dev -Dmaven.test.skip=ture  
  3. # 打测试环境  
  4. mvn clean package -P test -Dmaven.test.skip=ture  
  5. # 打生产环境  
  6. mvn clean package -P prod -Dmaven.test.skip=ture 

九、构建Docker镜像

整合dockerfile插件,可直接将jar包构建为docker image 并推送到远程仓库

增加插件依赖

  1. <!-- docker image build -->  
  2. <plugin>  
  3.     <groupId>com.spotify</groupId>  
  4.     <artifactId>dockerfile-maven-plugin</artifactId>  
  5.     <version>1.4.10</version>  
  6.     <executions>  
  7.         <execution>  
  8.             <id>default</id>  
  9.             <goals>  
  10.                 <!--如果package时不想用docker打包,就注释掉这个goal-->  
  11.                 <!--                        <goal>build</goal>-->  
  12.                 <goal>push</goal>  
  13.             </goals>  
  14.         </execution>  
  15.     </executions>  
  16.     <configuration>  
  17.         <repository>49.232.166.94:8099/example/${project.artifactId}</repository>  
  18.         <tag>${profileActive}-${project.version}</tag>  
  19.         <username>admin</username>  
  20.         <password>Harbor12345</password>  
  21.         <buildArgs>  
  22.             <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>  
  23.         </buildArgs>  
  24.     </configuration>  
  25. </plugin> 

在pom.xml同级目录下增加Dockerfile

  1. FROM registry.cn-hangzhou.aliyuncs.com/lh0811/lh0811-docer:lh-jdk1.8-0.0.1  
  2. MAINTAINER lh0811  
  3. ADD  ./target/${JAR_FILE} /opt/app.jar  
  4. RUN chmod +x /opt/app.jar  
  5. CMD java -jar /opt/app.jar 

十、源码获取 链接: https://pan.baidu.com/s/1mOOcIun7hrOsC_vp0w5aeA 提取码: mel3 

原文地址:https://mp.weixin.qq.com/s/fQTkMY2hK2AuOI3gE0TggQ

延伸 · 阅读

精彩推荐
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06