SpringBoot を開発に使用するプロセスでは、次のようなシナリオに対処する必要があることがよくあります。サービスの開始時に、サービスのステータスをサービス登録センター (zk など) に登録する必要があります。ステータスの変更、障害の除去、および負荷分散が可能です。
登録には 2 つの方法がありました:
1. Spring Web アプリケーションの開始後に直接登録します;
2. サーブレット コンテナーが起動された後開始したら、リスナーを介して登録します。
この記事では、zk を使用した従来の登録スキームを使用したこれら 2 つの登録方法についてデモを使用して説明します。
1. Spring Web アプリケーションの開始後に登録します。
まずコードを見てみましょう。
@SpringBootApplication public class WebApplication { private static final Logger logger = LoggerFactory.getLogger(WebApplication.class); private static volatile boolean IS_REGISTRY = false; public static void main(String[] args) { ApplicationContext context = run(WebApplication.class, args); if (IS_REGISTRY) { logger.info("注册2: WebApplication启动完成后"); ZkClient zkClient = context.getBean(ZkClient.class); zkClient.register(); IS_REGISTRY = true; logger.info("注册2: 注册成功"); } } }
ここでは、WebApplication 内の zkClient を取得して登録します。
ここで注意すべき点は、ApplicationContext を使用して zkClient の Bean を取得するということです。その理由は、すべての設定が起動プロセス中に読み取られるため、webApplication の初期化プロセス中に Bean を注入するために Autowired を使用できないためです。 Bean の初期化が完了します。初期化が完了するまで Bean を注入することはできません。
登録用の詳細なコードはここでは展開されません。
2. サーブレット コンテナが初期化された後、リスナーを介して登録します。
まだ最初にコードを作成します。
@WebListener public class RegisterListener implements ServletContextListener { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); private static volatile boolean IS_REGISTRY = false; @Autowired private ZkClient zkClient; @Override public void contextInitialized(ServletContextEvent servletContextEvent) { try { if (!IS_REGISTRY) { logger.info("注册1: Servelet容器启动成功后"); zkClient.register(); logger.info("注册1: 注册成功"); } IS_REGISTRY = true; } catch (Exception e) { IS_REGISTRY = false; logger.info("注册1: 注册失败"); } } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { if (IS_REGISTRY) { zkClient.stop(); } } }
最初にリスナーを作成する必要があります。 ServletContextListener インターフェースを作成し、それに @WebListener という注釈を付けます (Springboot の注釈付きリスナー作成メソッド)。
サーブレット コンテナが正常に起動されると、このリスナーの contextInitialized メソッドが呼び出されます。サーブレット コンテナが破棄されてサービスを提供できない場合は、リスナーの contextDestroyed メソッドが呼び出されます。つまり、このリスナーはサーブレット コンテナのステータスを監視しています。
その後、アプリケーションのメイン クラスでリスナー構成を開くだけで済みます。
@ServletComponentScan @SpringBootApplication public class WebApplication { }
3. これら 2 つの方法の比較
http プロトコルを外部に提供する Web サービスの場合、サーブレット コンテナの登録は意味的により明確になりますが、Spring コンテナが開始されると、時間が長すぎると、サーブレットの初期化が完了して登録されるまでに時間が空く可能性がありますが、サービスは外部アクセスを提供できないため、通常は最初の方法を使用して登録します。
このシナリオは次のようなものです
サーブレットが正常に登録された後、Web アプリケーションは実際にはまだ開始されておらず、サービスは開始できないことがわかります。現時点では正常です。アクセスを提供してください。
zk では、2 つの登録が成功したことがわかります。
以上がSpringbootで登録サービスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

javadevelopmentisnotentirelylylypratform-IndopentDuetoseveralfactors.1)jvmvariationsaffectperformanceandbehavioracrossdifferentos.2)nativeLibrariesviajniintroducePlatform-specificissues.3)giaiasystemsdifferbeTioneplateplatifflics.4)

Javaコードは、さまざまなプラットフォームで実行するときにパフォーマンスの違いがあります。 1)JVMの実装と最適化戦略は、OracleJDKやOpenJDKなどとは異なります。 2)メモリ管理やスレッドスケジューリングなどのオペレーティングシステムの特性もパフォーマンスに影響します。 3)適切なJVMを選択し、JVMパラメーターとコード最適化を調整することにより、パフォーマンスを改善できます。

java'splatformindepentedencehaslimitationsincludingporformanceoverhead、versioncompatibulisisues、changleSwithnativeLibraryIntegration、プラットフォーム固有の機能、およびjvminStallation/maintenation。

PlatformEndependEncealLowsProgramStorunonAnyPlatformWithOdification、whilecross-platformdevelopmentReadreessomeplatform-specificAdjustments.platformindependence、explifiedByjava、unableSiversAlexecutionButMayCompromperformance

jitcompalilationinjavaenhancesperformance whelemaintaining formindepence.1)itdynamicallyTrantesiNTODENATIVEMACHINECODEATRUNTIME、最適化されたコードを最適化すること、

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









