一款不錯(cuò)的SpringCloud 腳手架項(xiàng)目
之前接個(gè)私活,在網(wǎng)上找了好久沒(méi)有找到合適的框架,不是版本低沒(méi)人維護(hù)了,在不就是組件相互依賴(lài)較高。所以我自己搭建一個(gè)全新spingCloud框架,里面所有組件可插拔的,集成多個(gè)組件供大家選擇,喜歡哪個(gè)用哪個(gè)
一、系統(tǒng)架構(gòu)圖
二、快速啟動(dòng)
1.本地啟動(dòng)nacos: http://127.0.0.1:8848
- sh startup.sh -m standalone
2.本地啟動(dòng)sentinel: http://127.0.0.1:9000
- nohup java -Dauth.enabled=false -Dserver.port=9000 -jar sentinel-dashboard-1.8.1.jar &
3.本地啟動(dòng)zipkin: http://127.0.0.1:9411/
- nohup java -jar zipkin-server-2.23.2-exec.jar &
三、項(xiàng)目概述
- springboot+springcloud
- 注冊(cè)中心:nacos
- 網(wǎng)關(guān):gateway
- RPC:feign
以下是可插拔功能組件
- 熔斷降級(jí):sentinel
- 全鏈路跟蹤:sleth+zipkin
- 分布式事務(wù):seata
- 封裝功能模塊:全局異常處理、日志輸出打印持久化、多數(shù)據(jù)源、鑒權(quán)授權(quán)模塊、zk(分布式鎖和訂閱者模式)
- maven:實(shí)現(xiàn)多環(huán)境打包、直推鏡像到docker私服。
這個(gè)項(xiàng)目整合了springcloud體系中的各種組件。以及集成配置說(shuō)明。同時(shí)將自己平時(shí)使用的功能性的封裝以及工具包都最為模塊整合進(jìn)來(lái)。可以避免某些技術(shù)點(diǎn)長(zhǎng)時(shí)間不使用后的遺忘。
另一方面現(xiàn)在springboot springcloud 已經(jīng)springcloud-alibaba的版本迭代速度越來(lái)越快。
為了保證我們的封裝和集成方式在新版本中依然正常運(yùn)行,需要用該項(xiàng)目進(jìn)行最新版本的適配實(shí)驗(yàn)。這樣可以更快的在項(xiàng)目中集合工程中的功能模塊。
四、項(xiàng)目預(yù)覽
五、新建業(yè)務(wù)工程模塊說(shuō)明
由于springboot遵循 約定大于配置的原則。所以本工程中所有的額類(lèi)都在的包路徑都在com.cloud.base下。
如果新建的業(yè)務(wù)項(xiàng)目有規(guī)定使用指定的基礎(chǔ)包路徑則需要在啟動(dòng)類(lèi)增加包掃描注解將com.cloud.base下的所有類(lèi)加入到掃描范圍下。
- @ComponentScan(basePackages = "com.cloud.base")
如果可以繼續(xù)使用com.cloud.base 則約定將啟動(dòng)類(lèi)放在該路徑下即可。
六、模塊劃分
- 父工程:
- cloud-base - 版本依賴(lài)管理 <groupId>com.cloud</groupId>
- |
- |--common - 通用工具類(lèi)和包 <groupId>com.cloud.common</groupId>
- | |
- | |--core-common 通用包 該包包含了SpringMVC的依賴(lài),會(huì)與WebFlux的服務(wù)有沖突
- | |
- | |--core-exception 自定義異常和請(qǐng)求統(tǒng)一返回類(lèi)
- |
- |--dependency - 三方功能依賴(lài)集合 無(wú)任何實(shí)現(xiàn) <groupId>com.cloud.dependency</groupId>
- | |
- | |--dependency-alibaba-cloud 關(guān)于alibaba-cloud的依賴(lài)集合
- | |
- | |--dependency-mybatis-tk 關(guān)于ORM mybatis+tk.mybatis+pagehelper的依賴(lài)集合
- | |
- | |--dependency-mybatis-plus 關(guān)于ORM mybatis+mybatis—plus+pagehelper的依賴(lài)集合
- | |
- | |--dependency-seata 關(guān)于分布式事務(wù)seata的依賴(lài)集合
- | |
- | |--dependency-sentinel 關(guān)于流控組件sentinel的依賴(lài)集合
- | |
- | |--dependency-sentinel-gateway 關(guān)于網(wǎng)關(guān)集成流控組件sentinel的依賴(lài)集合(僅僅gateway網(wǎng)關(guān)使用該依賴(lài))
- | |
- | |--dependency-sleuth-zipkin 關(guān)于鏈路跟蹤sleuth-zipkin的依賴(lài)集合
- |
- |--modules - 自定義自實(shí)現(xiàn)的功能組件模塊 <groupId>com.cloud.modules</groupId>
- | |
- | |--modules-logger 日志功能封裝
- | |
- | |--modules-multi-datasource 多數(shù)據(jù)功能封裝
- | |
- | |--modules-lh-security 分布式安全授權(quán)鑒權(quán)框架封裝
- | |
- | |--modules-youji-task 酉雞-分布式定時(shí)任務(wù)管理模塊
- | |
- |
- |
- |
- | 以下是獨(dú)立部署的應(yīng)用 以下服務(wù)啟動(dòng)后配合前端工程使用 (cloud-base-angular-admin)
- |
- |--cloud-gateway 應(yīng)用網(wǎng)關(guān)
- |
- |--authorize-center 集成了modules-lh-security 的授權(quán)中心,提供統(tǒng)一授權(quán)和鑒權(quán)
- |
- |--code-generator 代碼生成工具
- |
- |--user-center 用戶(hù)中心 提供用戶(hù)管理和權(quán)限管理的相關(guān)服務(wù)
- |
- |--youji-manage-server 集成了modules-youji-task 的定時(shí)任務(wù)管理服務(wù)端
七、版本使用說(shuō)明
- <springboot.version>2.4.2</springboot.version>
- <springcloud.version>2020.0.3</springcloud.version>
- <springcloud-alibaba.version>2021.1</springcloud-alibaba.version>
八、多環(huán)境打包說(shuō)明
在需要獨(dú)立打包的模塊resources資源目錄下增加不同環(huán)境的配置文件
- application-dev.yml
- application-test.yml
- application-prod.yml
修改application.yml
- spring:
- profiles:
- active: @profileActive@
在需要獨(dú)立打包的模塊下的pom文件中添加一下打包配置。
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <version>${springboot.version}</version>
- <configuration>
- <fork>true</fork>
- <addResources>true</addResources>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <configuration>
- <delimiters>
- <delimiter>@</delimiter>
- </delimiters>
- <useDefaultDelimiters>false</useDefaultDelimiters>
- </configuration>
- </plugin>
- </plugins>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
- <profiles>
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <profileActive>dev</profileActive>
- </properties>
- </profile>
- <profile>
- <id>test</id>
- <properties>
- <profileActive>test</profileActive>
- </properties>
- </profile>
- <profile>
- <id>prod</id>
- <properties>
- <profileActive>prod</profileActive>
- </properties>
- </profile>
- </profiles>
mvn打包命令
- # 打開(kāi)發(fā)環(huán)境
- mvn clean package -P dev -Dmaven.test.skip=ture
- # 打測(cè)試環(huán)境
- mvn clean package -P test -Dmaven.test.skip=ture
- # 打生產(chǎn)環(huán)境
- mvn clean package -P prod -Dmaven.test.skip=ture
九、構(gòu)建Docker鏡像
整合dockerfile插件,可直接將jar包構(gòu)建為docker image 并推送到遠(yuǎn)程倉(cāng)庫(kù)
增加插件依賴(lài)
- <!-- docker image build -->
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>dockerfile-maven-plugin</artifactId>
- <version>1.4.10</version>
- <executions>
- <execution>
- <id>default</id>
- <goals>
- <!--如果package時(shí)不想用docker打包,就注釋掉這個(gè)goal-->
- <!-- <goal>build</goal>-->
- <goal>push</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <repository>49.232.166.94:8099/example/${project.artifactId}</repository>
- <tag>${profileActive}-${project.version}</tag>
- <username>admin</username>
- <password>Harbor12345</password>
- <buildArgs>
- <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
- </buildArgs>
- </configuration>
- </plugin>
在pom.xml同級(jí)目錄下增加Dockerfile
- FROM registry.cn-hangzhou.aliyuncs.com/lh0811/lh0811-docer:lh-jdk1.8-0.0.1
- MAINTAINER lh0811
- ADD ./target/${JAR_FILE} /opt/app.jar
- RUN chmod +x /opt/app.jar
- CMD java -jar /opt/app.jar
十、源碼獲取 鏈接: https://pan.baidu.com/s/1mOOcIun7hrOsC_vp0w5aeA 提取碼: mel3