以前、私的な仕事をしていたのですが、インターネットで長い間検索していて、適切なフレームワークが見つかりませんでした。バージョンが低く、誰もメンテナンスされていないか、コンポーネントが高度に相互依存しています。そこで、私は自分で新しいspingCloudフレームワークを構築しました。その中のすべてのコンポーネントはプラグイン可能であり、複数のコンポーネントが統合されているため、誰もが選択できます。
1.システムアーキテクチャ図
2.クイックスタート
1.ローカルホストでnacosを開始します:http://127.0.0.1:8848
sh startup.sh -m standalone
复制代码
2.ローカルでセンチネルを開始します:http://127.0.0.1 :9000
nohup java -Dauth.enabled=false -Dserver.port=9000 -jar sentinel-dashboard-1.8.1.jar &
复制代码
3. zipkinをローカルで起動します:http://127.0.0.1:9411 /
nohup java -jar zipkin-server-2.23.2-exec.jar &
复制代码
3.プロジェクトの概要
- springboot + springcloud
- 登録センター:nacos
- ゲートウェイ:ゲートウェイ
- RPC:feign
以下は、プラグイン可能な機能コンポーネントです
- フロー制御ヒューズのダウングレード:番兵
- フルリンクトラッキング:sleth + zipkin
- 分散トランザクション:seata
- カプセル化された機能モジュール:グローバル例外処理、ログ出力の印刷の永続性、複数のデータソース、認証および承認モジュール、zk(分散ロックおよびサブスクライバーモード)
- Maven:マルチ環境パッケージングを実現し、イメージをDockerプライベートサーバーに直接プッシュします。
このプロジェクトは、springcloudシステムのさまざまなコンポーネントを統合します。および統合構成手順。同時に、通常使用する機能パッケージとツールキットは、ほとんどのモジュールに統合されています。長期間使用しないことで、技術的なポイントを忘れることができます。
一方、springboot springcloudおよびspringcloud-alibabaのバージョンは、現在、ますます高速に反復されています。
新しいバージョンでもカプセル化と統合の方法が正常に機能するようにするには、このプロジェクトを使用して最新バージョンの適応実験を実行する必要があります。このようにして、プロジェクト内の機能モジュールをプロジェクト内でより迅速に組み立てることができます。
4.プロジェクトプレビュー
V.新しいビジネスエンジニアリングモジュールの説明
springbootは設定より規約の原則に従っているためです。したがって、このプロジェクトのすべてのクラスが配置されているパッケージパスはcom.cloud.baseの下にあります。
新しく作成されたビジネスプロジェクトで指定された基本パッケージパスが指定されている場合は、スタートアップクラスにパッケージスキャンアノテーションを追加して、com.cloud.baseの下のすべてのクラスをスキャンスコープに追加する必要があります。
@ComponentScan(basePackages = "com.cloud.base")
复制代码
com.cloud.baseを引き続き使用できる場合は、スタートアップクラスをこのパスに配置するのが慣例です。
6.モジュール分割
父工程:
cloud-base - 版本依赖管理 <groupId>com.cloud</groupId>
|
|--common - 通用工具类和包 <groupId>com.cloud.common</groupId>
| |
| |--core-common 通用包 该包包含了SpringMVC的依赖,会与WebFlux的服务有冲突
| |
| |--core-exception 自定义异常和请求统一返回类
|
|--dependency - 三方功能依赖集合 无任何实现 <groupId>com.cloud.dependency</groupId>
| |
| |--dependency-alibaba-cloud 关于alibaba-cloud的依赖集合
| |
| |--dependency-mybatis-tk 关于ORM mybatis+tk.mybatis+pagehelper的依赖集合
| |
| |--dependency-mybatis-plus 关于ORM mybatis+mybatis—plus+pagehelper的依赖集合
| |
| |--dependency-seata 关于分布式事务seata的依赖集合
| |
| |--dependency-sentinel 关于流控组件sentinel的依赖集合
| |
| |--dependency-sentinel-gateway 关于网关集成流控组件sentinel的依赖集合(仅仅gateway网关使用该依赖)
| |
| |--dependency-sleuth-zipkin 关于链路跟踪sleuth-zipkin的依赖集合
|
|--modules - 自定义自实现的功能组件模块 <groupId>com.cloud.modules</groupId>
| |
| |--modules-logger 日志功能封装
| |
| |--modules-multi-datasource 多数据功能封装
| |
| |--modules-lh-security 分布式安全授权鉴权框架封装
| |
| |--modules-youji-task 酉鸡-分布式定时任务管理模块
| |
|
|
|
| 以下是独立部署的应用 以下服务启动后配合前端工程使用 (cloud-base-angular-admin)
|
|--cloud-gateway 应用网关
|
|--authorize-center 集成了modules-lh-security 的授权中心,提供统一授权和鉴权
|
|--code-generator 代码生成工具
|
|--user-center 用户中心 提供用户管理和权限管理的相关服务
|
|--youji-manage-server 集成了modules-youji-task 的定时任务管理服务端
复制代码
7、バージョンの説明
<springboot.version>2.4.2</springboot.version>
<springcloud.version>2020.0.3</springcloud.version>
<springcloud-alibaba.version>2021.1</springcloud-alibaba.version>
复制代码
8つのマルチ環境パッケージング手順
個別にパッケージ化する必要があるモジュールのリソースリソースディレクトリに、さまざまな環境の構成ファイルを追加します
application-dev.yml
application-test.yml
application-prod.yml
复制代码
application.ymlを変更します
spring:
profiles:
active: @profileActive@
复制代码
個別にパッケージ化する必要があるモジュールの下の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パッケージコマンド
# 打开发环境
mvn clean package -P dev -Dmaven.test.skip=ture
# 打测试环境
mvn clean package -P test -Dmaven.test.skip=ture
# 打生产环境
mvn clean package -P prod -Dmaven.test.skip=ture
复制代码
9.Dockerイメージを構築します
dockerfileプラグインを統合します。これにより、jarパッケージをdockerイメージとして直接ビルドし、リモートウェアハウスにプッシュできます。
プラグインの依存関係を追加する
<!-- 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时不想用docker打包,就注释掉这个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と同じディレクトリに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
复制代码