2.7.0バージョンアップデートの詳細:
- 修正:修復タスクが開始された後、タスクのトリガー時間を更新すると、有効になりません。修正:29
- 修正:redis永続化戦略はグローバル構成に影響を与えません
- 修正:開始時にuidモジュールがエラーを報告する可能性があるバグを修正
- feat:ContextHandlerInterceptor、TenantContextHandlerInterceptor、およびMdcHandlerInterceptorをHeaderThreadLocalInterceptorに結合します。これは、特に要求ヘッダーのパラメーターを処理し、それをThreadLocalにカプセル化するために使用されます。
- feat:TokenContextFilterは、テナントとトークンを無視するための個別の構成をサポートします
- feat:IgnoreTokenPropertiesの名前をIgnorePropertiesに変更し、元の構成「ignore.token.url」を「zuihou.ignore.xxx」に変更します
- feat:無駄なユニットテストを破棄する
- feat:apacheのStringUtilsをhutoolのStrUtilに置き換えます
- feat:xss-starter関連の関数は、構成ファイルを介した構成をサポートします
- feat:SysLogアノテーションは、現在のスレッドコンテキストでのパラメーターの取得をサポートします。使用法#threadLocal.name
- feat:データインジェクションコード構造、コメント最適化
- feat:データインジェクションは指定されたフィールドのインジェクションを無視することをサポートします
- feat:コードコメントが改善され、コードロジックが最適化され、バグが修正されました
前書き:
`SpringCloud(Hoxton.SR7)` + `SpringBoot(2.2.9.RELEASE)`に基づくマイクロサービススキャフォールディング。テナントの実装方法を自由に無効化および切り替えることができます。ユーザー管理、リソース権限管理、統合ゲートウェイ認証、Xssアンチクロスサイト攻撃、自動コード生成、複数のストレージシステム、分散トランザクション、分散タイミングタスク、およびその他のモジュールは、マルチビジネスシステムの並列開発をサポートし、複数のサービスの並列開発をサポートし、バックエンドサービス開発の足場として使用できます。コードは簡潔で構造は明確であり、学習と使用に非常に適しています。コアテクノロジーは、Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Seata、Sentinel、RabbitMQ、FastDFS、およびその他の主要なフレームワークとミドルウェアを採用しています。
SaaSの基本フレームワーク - マイクロサービスアーキテクチャ - 自動展開 - システム監視 から一連のソリューションを作成するために一生懸命働きたいと思っています 。このプロジェクトは基本的な機能を実現することを目的としており、特定のビジネスは関与しません。
本プロジェクトは、従来のテーブル構造設計仕様、コード記述仕様、モジュール分割仕様を通じて、システムのコード生成機能、基本機能、共通機能、一般機能の実現を目指しています。
アーキテクチャ図:
テナントモデル:
テナントモデル | 説明 | 利点 | 不利益 | 分散トランザクション |
NONE(非テナントモード) | テナントなし | シンプルで独立したシステムに適しています | テナントシステムの利便性の欠如 | 待機する |
COLUMN(フィールドモード) | テナントはデータベースを共有し、区別するためにビジネステーブルにフィールドを追加します | 知覚のないシンプルで複雑でない開発 | データの分離が不十分、セキュリティが不十分、データのバックアップとリカバリが困難 | 待機する |
SCHEMA(独立したスキーマ) | 各テナントには独立したデータベース(スキーマ)があります。sqlを実行するときは、テーブル名の前にスキーマを動的に追加します。 | シンプルで、開発の認識がなく、優れたデータ分離 | データベースのルートアカウントは構成ファイルで構成する必要があり、複雑なSQLおよびSQLネストされたカスタム関数はサポートされていません | 待機する |
DATASOURCE(独立したデータソース) | 各テナントには独立したデータベース(データソース)があり、コードの実行時にデータソースが動的に切り替えられます | データベースは独立して展開でき、優れたデータ分離、高いスケーラビリティ、および障害への影響が少ない | 比較的複雑な開発では、データソースを切り替えるときにトランザクションの問題に注意を払う必要があり、より多くのデータベースが必要になります | 待機する |
特徴:
- テナント管理:操作の背景(zuihou-admin-ui)がすべてのテナント作成を管理します
- ユーザーセンター:組織、位置、ユーザーデータの保守、ユーザーパスワードのリセットなど。
- 権限管理:メニュー、リソース構成、役割管理、ユーザーを役割にバインドし、メニューとリソースを役割に承認します
- 基本構成:辞書、地域、システムパラメータおよびその他の情報の保守
- 開発者管理:アプリケーション管理、データベースモニタリング、操作ログ、ログインログ、Swaggerインターフェイスドキュメント、登録センター、さまざまなモニタリング
- メッセージセンター:このサイトでメッセージを送信および表示する
- SMSセンター:主要なオペレーターの基本的なSMS構成構成後、システムはSMSを送信する機能を備えています
- ファイルセンター:システム添付ファイルのアップロードおよびストレージ機能、ローカルストレージ、FastDFSストレージ、Alibaba Cloudストレージの組み込みサポート、および構成の切り替えのみを提供します
- ゲートウェイ管理:現在の制限機能、アクセスブロック機能(つまり、heiリスト)
- プロセス管理:ワークフローの一般的な機能(モデル管理、プロセス展開など)
テクニカルポイントの紹介:
サービス認証:
JWTは、内部サービスのセキュリティを確保するために、サービス間のスケジューリングの承認検証を強化するために使用されます。
モニター:
Spring Boot Adminを使用して、独立した各サービスの実行ステータスを監視します。turbineを使用して、インターフェイスの実行ステータスと呼び出し頻度をリアルタイムで表示します。Zipkinを使用して、各サービス間のコールチェーンを表示します。
データ許可:
単純なデータ権限は、Mybatisに基づくDataScopeInterceptorインターセプターを使用して実装されます
SaaSのナンセンスソリューション:
Mybatisインターセプターを使用してすべてのSQLのインターセプトを実現し、COLUMNモードでテナントコードを動的にスプライスし、SCHEMAモードでデフォルトのスキーマを変更し、DATASOURCEモードでデータソースを動的に切り替えて、マルチテナントデータの分離を実現します。また、無効なテナントモードをサポートします。
二次キャッシュ:
J2Cacheはキャッシュの操作に使用され、第1レベルのキャッシュはメモリ(カフェイン)を使用し、第2レベルのキャッシュはRedisを使用します。キャッシュ読み取りの数が多いと、L2ネットワークがシステム全体のボトルネックになるため、L1の目標はL2への読み取り数を減らすことです。キャッシングフレームワークは、主にクラスター環境で使用されます。また、スタンドアロンコンピュータで使用して、アプリケーションの再起動によるキャッシュのコールドリスタート後のバックエンドビジネスへの影響を回避することもできます。
エレガントな豆の変換:
Dozerコンポーネントを使用して、DTO、DO、PO、およびその他のオブジェクトの変換を最適化します
統合されたフロントエンドとバックエンドのフォーム検証:
厳密なフォーム検証では通常、フロントエンドとバックエンドの両方の検証が必要ですが、従来のプロジェクトでは、フロントエンドとバックエンドごとに1回しかテストできません。ルールを変更した後は、フロントエンドとバックエンドを同時に変更する必要があります。したがって、hibernate-validatorに基づいて、Zuihou-validator-starterの初期依存関係がカプセル化され、フォームの検証に必要なルールを取得するための共通のインターフェイスが提供され、フロントエンドはバックエンドから返されたルールを使用します。ルールが将来変更される場合は、バックエンドのみが必要です。変更するだけです。
アンチクロスサイトスクリプティング(XSS):
- フィルタを使用して、すべてのリクエストのフォームパラメータをフィルタリングします
- Jsonデシリアライザーを使用してすべてのアプリケーション/ jsonタイプのパラメーターをフィルタリングします
現在のユーザー情報インジェクター:
注釈によるユーザーIDの挿入
オンラインAPI:
ネイティブswagger-uiの一部の機能は十分に使い勝手が良くないため、国内のオープンソースknife4jを採用し、springbootユーザーの使用を容易にするためにステータスを作成します。
コードジェネレーター:
コードジェネレーターのセットは、Mybatis-plus-generatorに基づいてカスタマイズされます。データベースフィールドのアノテーションを構成することにより、列挙クラス、データディクショナリアノテーション、SaveDTO、UpdateDTO、フォーム検証ルールアノテーション、Swaggerアノテーションなどを自動的に生成します。
時限タスクスケジューラ:
この機能は、xxl-jobsに基づいて拡張されています。(例:指定された時間にタスクを送信する、エグゼキュータとスケジューラを組み合わせたプロジェクト、複数のデータソース)
大きなファイル/ブレークポイント/スライスの再開:
フロントエンドはwebupload.jsを使用し、バックエンドはNIOを使用して、大きなファイルブレークポイントと断片化された再開を実現します。Eureka、Zuul、およびFileサービスを開始した後、docs / chunkUploadDemo /demo.htmlを直接開いてテストします。テスト後、ローカル制限128Mの最大メモリでファイルサービスが開始され、4.6G +の大きなファイルを5分以内に正常にアップロードできます。公式サービスの消費時間は、ユーザーとサーバーの帯域幅の影響を受け、時間が長くなります。
分散トランザクション:
Aliの分散トランザクションミドルウェアであるseataを統合 して、マイクロサービスが 直面する分散トランザクションの問題を効率的 かつ煩わしい方法でビジネスに解決し ます。
グレーリリース:
頻繁なサービスの更新と起動、バージョンのロールバック、迅速な反復、および社内での共同開発を解決するために、このプロジェクトでは、変更されたリボン負荷分散戦略を使用してグレーリリースを実現します。
関連データの自動挿入:
これは、テーブル間、データベース間、およびサービス間ページングデータ属性、または関連データをエコーする単一オブジェクトの属性の問題を解決するために使用されます。静的データ属性(データディクショナリ)および動的プライマリキーデータの自動挿入をサポートします。
プロジェクトコードアドレス
事業 | ジティー | github | 備考 |
マイクロサービスプロジェクト | https://gitee.com/zuihou111/zuihou-admin-cloud | https://github.com/zuihou/zuihou-admin-cloud | SpringCloudバージョンのバックエンドコード |
単一のプロジェクト | https://gitee.com/zuihou111/zuihou-admin-boot | https://github.com/zuihou/zuihou-admin-boot | SpringBootバージョンのバックエンドコード |
テナントの背景 | https://gitee.com/zuihou111/zuihou-ui | https://github.com/zuihou/zuihou-ui | | お客様向けのフロントエンド |
開発と運用の背景 | https://gitee.com/zuihou111/zuihou-admin-ui | https://github.com/zuihou/zuihou-admin-ui | 社内の開発・運用・運用・保守担当者が使用 |
コードジェネレーター | https://gitee.com/zuihou111/zuihou-generator | https://github.com/zuihou/zuihou-generator | 開発者は |
コアツールキット | https://gitee.com/zuihou111/zuihou-commons | https://github.com/zuihou/zuihou-commons | コアツールキット |
デモンストレーションアドレス(デモアカウントには書き込み権限がなく、クエリのみ)
事業 | デモアドレス | 管理者アカウント | 普通のアカウント |
テナントの背景 | http://tangyh.top:10000/zuihou-ui | zuihou / zuihou | テスト/ zuiou |
開発と運用の背景 | http://tangyh.top:180/zuihou-admin-ui | demoAdmin / zuihou | 番号 |