まず、なぜサービス発見のための必要性
簡潔には、コアのサービスは、サービスに伝統的なストップサービス分割に応じて適用され、そしてマイクロサービスのこれに基づいてより完全に減結合する(DBを共有しない、KV、削除ヘビーESB)、そしてDevOpsチームと高速進化を強調しました。これは、回を採用し、停止するために私達を必要とするさまざまな技術スタックパン-SOA時代、そして春の雲は最高の一つです。
英語の開発・事業DevOpsチームが適合している、彼はビルドインフラに小さく、より頻繁に、より自動化されたアプリケーションのリリース、アプリケーションアーキテクチャと周辺インフラを作るために、統合の協力の開発、テスト、運用、保守を依頼しました。これは、凝集の完全なアプリケーションを必要とするだけでなく、運用、保守・管理を容易にします。このアイデアはマイクロサービスのコンセプトと一致しています。
春の雲の観点から、次の我々のサービスアーキテクチャの進化とは、なぜ、より応答性のマイクロサービスへのアーキテクチャを参照してください。
nginxのを使用してからいえば1.1
最初のサービス・ソリューション、発信者は、HTTPリクエスト、ドメイン名に配布し、ジャンプの責任要求nginxのを送信し、統一ドメイン名とサービスを提供するために、同じサービスを提供することです。
このアーキテクチャには多くの問題があります。
- 中間層としてnginxのは、マイクロおよびサービスの完全性を損なうだけでなく、ヘビーESBある程度にnginxのを作るサービス呼び出しロジックの設定ファイルに結合されています。
- 様々なシステムに散在情報サービスは、管理と保守を統一することはできません。すべてのサービスコールは、消費者がサービスとそれらを提供するサービスインスタンスかわからない、初めての試みです。これは、DevOpsチームのコンセプトに沿ったものではありません。
- 私たちは、視覚的に、サービスプロバイダとサービスコンシューマ現在の健康状態や通信周波数を見ることができません。これは、DevOpsチームのコンセプトに沿ったものではありません。
- 消費者の再送信に失敗し、負荷分散など、各サービスの開発の難しさを増加統一政策は、存在しない、急速な進化を助長されていません。
上記課題を解決するために、我々は必要な既製のサービスコンポーネント名、住所、数量などのサービス統合の中心的なコンポーネント、各サービスの概要情報を、。サービスセンターのコンポーネントによって要求されたときの情報最初のインスタンス(IP、ポート等)を取得するためにこのサービスを提供し、ポリシーのデフォルトまたはカスタマイズを介してサービスのプロバイダを選択するため、発信者サービス直接アクセス。そこで、我々は、ダボを導入しました。
ダボに基づいて1.2 microServiceを達成
アリダボは、オープンソースSOAサービス管理ソリューション、豊富な文書は、国の使用は非常に高いです。
ダボはマイクロサービスを使用して構築され、それは上記の問題へのよりよい解決策となっていることがあります。
-
消費者が直接サービスプロバイダにアクセスすることができ、中間層は、オプションのコンポーネントとなって呼び出します。
-
サービス情報は、レジストリに集中サービスガバナンスの中心的構成要素が形成されています。
-
モニター監視システムによって、あなたは視覚的に統計情報サービスコールを表示することができます。
-
消費者は、負荷分散、サービス低下の選択を行うことができます。
しかし、サービスの点ではマイクロアーキテクチャのため、ダボも完璧ではありません。
-
レジストリは問題があるこれらのコンポーネントは、サービスコールはすぐに中断され、サードパーティ製のコンポーネント(飼育係やRedisの)、に大きく依存しています。
-
ダボはRPCコールをサポート。サービスプロバイダーを有効にして、呼び出し元のコードに強く依存していた、サービスプロバイダは、消費者の使用のために包装のjarパッケージのうち、共通のコードを含むように継続する必要があります。パッケージングの問題と、それは、サービスコールエラーになります。
-
最も重要なのは、ダボは現在メンテナンス、新技術開発のための需要、開発者自身でアップグレードを拡大する必要性を停止しました。これはマイクロサービスアーキテクチャにしたい、多くの中小ソフトウェア企業のために、それは明らかに適切ではありません。
現在、GithubのコミュニティにDUBBOXと呼ばれるダボのアップグレード版は、シリアライズのRPCとREST呼び出しのより効率的な方法を提供します。しかし、また、基本的に停止したプロジェクトが維持しました。
クラウドを--Spring 1.3の新しいオプション
サービスフレームワークの新世代として、春の雲のスローガンは、前方に置くマイクロアーキテクチャのためのより包括的な技術サポートサービスを提供する、「クラウド指向のアプリケーション環境」を開発することです。私たちは冒頭で述べたマイクロサービスの要求と組み合わせることで、私たちは春の雲とダボがいくつか比較することがあります。
必要に応じてマイクロサービス | ダボ | 春の雲 |
---|---|---|
サービスの登録と発見 | 飼育係 | ユーレカ |
サービスの呼び出し | RPC | RESTfulなAPI |
ブレーカー | 持っています | 持っています |
ロードバランシング | 持っています | 持っています |
サービスルーティングとフィルタリング | 持っています | 持っています |
分散構成 | ノー | 持っています |
分散ロック | ノー | 開発する計画 |
クラスタの主な選挙 | ノー | 持っています |
分散メッセージ | ノー | 持っています |
スプリングクラウドREST HTTPベースの方法を使用して、ダボRPC通信を放棄しました。厳密に言えば、これらの2つの方法には長所と短所があります。ある程度、後者のパフォーマンスサービスコールを犠牲にしますが、だけでなく、ネイティブRPC上記の問題を回避するためにもたらします。RPCおよびRESTをより柔軟に、サービスプロバイダに比べて、紙の契約書、コードレベルの強い依存性がマイクロサービス環境の急速な進化を強調し、この場合には存在しません、発信者のみに依存依存し、より適切であるように思われます。
マイクロのためにこれらのサービス明らかに、春の雲は、より広いカバレッジダボよりも強力ですが、また春拳のプロジェクトとして、それはまた可能である、春ブーツ、春データ、春のフレームワークと春のバッチ春と他の項目の完全な統合、それは非常に重要です。先に述べたように、概念の背後にある重要なマイクロサービスは、技術ポートフォリオを分散させることがより明確に、より効率的で継続的インテグレーション、高速配信、および技術的な枠組みの中で統一内部サービスの使用が、あります。さらに重要なことは、ダボに比べて、それが継続的な保守で、それが構築されていることを確認するためにシステムを使用してより多くの火のコミュニティのオープンソースプロジェクトは、オープンソースの力でサポートされているし続けることができます。
二、春の雲Netflixのコンポーネント
ネットフリックスと春の雲はそれで何をするのですか?ネットフリックスは、インターネットサービス会社の成功の練習マイクロアーキテクチャで、数年前、それはほぼ全体Netflixのマイクロ・サービススタックフレームは、オープンソースコミュニティに貢献しました。開発者はマイクロサービスインフラストラクチャのフレームワークを構築するための極めて重要な主に、さらにオープンソースNetflixのパッケージに春クラウドのオープンソース製品の2015年打ち上げ、後ろの春組み立て、春は簡単。マイクロ管理サービスのために、コアは、登録と発見サービスです。だから、そのためのサービス登録と発見のソリューションに依存して大きくするコンポーネントを選択します。この領域では、オープンソースアーキテクチャの多くは、最も一般的なのは、飼育係であるが、これは最良の選択ではありません。
:分散システムの分野ではよく知られたCAP定理ありC--データの一貫性、A--サービスの可用性、P--サービスネットワークパーティション障害フォールトトレランスが。これら三つの特性が会う2個の、任意の分散システムでは満たすことができません。
飼育係は、Hadoopの有名な、サービス・ソリューションとして多くのシーン飼育係も見サービスのサブプロジェクトです。飼育係は、CPがその保証、すなわち、いつでもアクセスが飼育係要求データ一貫性のある結果を得ることができ、システムのフォールトトレラントネットワークが分割され、それは各サービス要求の可用性を保証することはできません。選挙がメインの飼育係である、または半分以上飼育係のクラスタマシンは、データが得られないだろう、利用できません。場合は、実際の状況の分析から、飼育係を使用している場合は、サービスのリストを取得します だから、飼育係は、サービスの可用性を保証することはできません。
実際、ほとんどの分散環境のために、特にデータストレージに関連した場面では、データの一貫性を最初に保証しなければならない、これはCPに設計された理由の飼育係です。しかし、サービス発見シナリオのために、状況は同じではありません。同じサービスのために、異なるノードのレジストリ情報に保存されているサービスプロバイダが同じでない場合でも、それは壊滅的な結果は発生しません。そのため、サービスの消費者のために、エネルギー消費量が最も重要である-彼らはむしろ過ごすよりも情報の例よりも良くなることができないので、それを試して、正しい消費者情報ではないかもしれないサービスのインスタンスを取得します。そのため、サービスの発見のために、データの一貫性の可用性は、CPよりも--APよりも重要です。ユーレカはAP原理で設計する際の春クラウドNetflixが続きます。
ユーレカ自体は、ネットフリックスは、サービス登録と発見の製品を提供していますし、対応するJavaパッケージを提供するオープンソースです。その実装では、ノード間の相互の平等は、レジストリのノード部分は、クラスタノードを生き残るだけでなく、通常は検出サービスを提供することができたとしても、インパクトのクラスタがハングアップする必要はありません。すべてのノードがサービス登録にリンクされている場合でも、通話サービス情報は、ユーレカクライアントにキャッシュされます。各呼び出しは、当社のマイクロサービスの間の強固な十分であることをこれが保証されます。
また、オープンソースの背後に、春の雲Netflixの強力な勢力が、また、春の雲はNetflixを選択するために私達を促しました。
- 前に述べたように、春のクラウドコミュニティは、(特に海外)そのアプリケーションは、業界では非常に広範で、非常に有効ですが、また、全体のフレームワークは、Netflixの厳しい生産環境のテストに耐えました。
- サービス登録と発見に加えて、他の特徴春のクラウドNetflixがリボンを含め、また、非常に強いですhystrix、装う、Zuulおよびその他のコンポーネントが一緒に参加し、のも非常に簡単になり、ルーティング、サービスを呼び出してみましょう。
- 春クラウドNetflixがヘビー級統合Springフレームワークとして、我々は非常に便利に春から取得することを意味し、また、それを使用します。など春のクラウドストリーム、春の雲コンフィグ、などの他のサブプロジェクト春の雲は、マイクロサービスのすべてのニーズにワンストップソリューションを提供しています。
三、春のクラウドサービスの発見
コア春クラウドNetflixのは、サービス登録と発見のためのユーレカで、私たちは手がかりとしてユーレカしようとしている次は、ユーレカ、リボン、Hystrix、装うこれらの春クラウドNetflixの主要なコンポーネントを導入しました。
3.1サービスの登録と発見--Eureka
通りの叫びに、ズボンの上RANを置くために、幸せな時間をお風呂に入りながら、ユーレカ言葉は「私は私が見つけた!!」伝説によると意味、古代ギリシャ語から来て、アルキメデスは、浮力の原理を発見しました。 「ユーレカ(Iが見つかりました)!」
ユーレカサーバーとユーレカクライアント:これらのサービスの例で複数のインスタンス(サービスインスタンス)によるユーレカは、2つのタイプに分けることができます。理解を容易にするために、我々は、ユーレカ、クライアント・サービス・プロバイダーとサービスコンシューマーに細分化されます。下図のように:
- ユーレカサーバー:レジストリサービスは、登録されたサービスのリストを保持します。
- サービスプロバイダー:サービスプロバイダ、ユーレカクライアントとしては、その上の主要なデータ登録されているサービス名、マシンのIP、ポート番号、ドメイン名、およびなど、ユーレカServerサービス登録、更新および組立ラインやその他の操作オフを行います。
- サービス消費者:エウレカクライアントとして消費者サービスは、サービスプロバイダユーレカサーバーへの登録情報を取得し、リモート呼び出しやサービスプロバイダーを介して通信します。
サービスプロバイダサービスの消費者は、厳密には概念ではないと、サービス消費者は常にサービスプロバイダに身を作るために、ユーレカServerに登録することができます。春クラウドは、サービス登録と発見のために、抽象化の層を実施し、3つの実装を提供:ユーレカ、領事、飼育係を。これは、現在、領事が続く最高のサポートユーレカ、あり、そして最終的に飼育係。
3.1.1ユーレカサーバー
REST APIの形でスタンドアロン配置ユニットとしてユーレカServerは、サービスインスタンスの登録、管理、およびクエリ操作を提供します。一方、ユーレカServerはまた、視覚的なモニタリング・ページを提供してくれますが、視覚的に各ユーレカサーバーおよびすべての例登録されたサービスの現在の動作状態を確認することができます。
3.1.1.1ユーレカServer高可用性クラスタ
ユーレカServerはシングルポイントの問題を解決するために、クラスタを構築するために複数のインスタンスを実行することができますが、プロセスはリーダーのZooKeeperの選挙とは異なり、ユーレカServerは、ピア通信にピアツーピアを使用しています。これは、各ピアがピアである、分散型アーキテクチャ、無マスタ/スレーブの区別です。このアーキテクチャでは、ノードは他のノードのserviceURL有効に1つ以上のリンクを追加するには、各ノードのニーズの可用性を高めるためにお互いに登録されています。各ノードは他のノードのコピーとして見ることができます。
駅ユーレカサーバーのダウンタイム要求ユーレカクライアントが自動的に新しいユーレカServerノード、サーバーのダウンタイムに切り替わります場合は復元されたとき、ユーレカは再びサーバークラスタの管理に組み込まれます。ノードは、クライアントの要求を受け入れるように起動すると、すべての操作はreplicateToPeer(ノード間のコピー)運転、現在ユーレカサーバーで知られている他のすべてのノードに要求されます。
新しいユーレカServerノードが開始された後、それは最初の完全な初期化に隣接ノードからレジストリ情報のすべてのインスタンスを取得しようとします。ユーレカServerは、すべてのノードgetEurekaServiceUrls()メソッドを取得し、ハートビート定期の更新によって更新されます。ユーレカServerが一定の時間内にサービスインスタンスのハートビートを受信しない場合、デフォルトの設定、ユーレカサーバーは(デフォルトはeureka.instance.lease-満了期間-in-secondsの設定により、90秒である)のインスタンスをログオフします。ユーレカServerノードが(たとえば、ネットワークパーティションの障害など)短時間であまりにも多くのハートビートを失っている場合は、そのノードは、自己保存モードになります。ユーレカの公式サイトショー下のチャート
自己保護モードとは何ですか?デフォルトのコンフィギュレーション、ユーレカServerは、毎分の心拍数が少なく、閾値更新(*のインスタンスの数(60 /各インスタンスは、間隔秒ハートビート)*自己保護因子)より、自己保護がトリガされている受信した場合。自己保護モードでは、ユーレカServerサービスは、レジストリ内の情報、任意のサービスインスタンスのノーキャンセルを保護します。それは、閾値以上に回復した心拍数を受信すると、ユーレカサーバー・ノードは自動的に自己保護モードを終了します。その設計思想が述べた以前、むしろ盲目的にすべての可能な保健サービスのインスタンスをオフに書いていない、間違ったサービス登録情報を予約されています。このモードでは、ハートビート間隔を変更するために使用することができるで-秒eureka.instance.lease-更新間隔-ながら、eureka.server.renewalパーセントしきい値を使用することができ、eureka.server.enable-自己保存=偽で無効にすることができます自己保護因子(デフォルト0.85)を変更します。
3.1.1.2 Eureka Server的Region、Zone
抽象的な概念によるREGIN、ゾーンへユーレカの公式ドキュメントほとんど言及は、初心者には理解しにくいです。以下のようにそのため、我々は、第1の領域、ゾーン、3のユーレカクラスターとの関係を見て:
地域やゾーン(またはアベイラビリティゾーン)AWSの概念です。非AWS環境では、我々は単に最初ユーレカクラスター領域として理解することができ、ゾーンは、エンジンルームと解釈しました。ユーレカクラスタがZONE1 ZONE2エンジンルーム、エンジンルーム内に配備される図は、理解することができます。
3.1.2サービスプロバイダ
3.1.2.1サービス・レジスタ
サービスプロバイダは、本質的にユーレカクライアントです。それが起動すると、それはユーレカサーバーに自分の情報を登録するサービス登録プロセスを呼び出します。ユーレカServerが登録されたサービスのリストを維持し、このリストは、ネストされたハッシュマップです。
- 第一の層、アプリケーション名と対応するサービスインスタンス。
- IP、ポート番号を含む第2層、及び登録情報に対応するサービスインスタンス。
replicateToPeersを使用している間(例えば、それ自体がダウンとして検出時間として)インスタンスの状態の変化は、ユーレカサーバーへのサービスのステータスを更新する場合()他のユーレカサーバノードに状態同期を行います。
3.1.2.2更新と除去
先に述べたように、サービスインスタンスを開始するには、それが定期的に登録情報が削除される避けるために、自分の情報を更新するユーレカサーバーにハートビートを送信します。登録サービスのリニューアルは、基本的には同じ方法です:まず、自分のステータスを更新して、他のピアに同期。
ユーレカServerがマイクロサービスは、一定期間にわたってノードハートビートを受信しない場合、ユーレカServerは(自己保護モードを除く)のマイクロサービスノードをログオフします。
3.1.3サービスのコンシューマー
サービス消費者の本質はユーレカクライアント(それはまた、ユーレカサーバーに登録しますが、この登録情報は、ベールを関係ありません)です。それが開始された後、それはIPアドレスとポートを含め、すべてのインスタンス、ユーレカサーバーの登録情報から取得し、ローカルにキャッシュされます。この情報は、デフォルトでは30秒ごとに更新されます。中断されたユーレカServerはサービスの消費者はまだローカルキャッシュを介してサービスプロバイダと通信することができ、と通信する場合、私は、前に述べました。
ユーレカ実際の開発プロセスは、時々にサービス消費者情報サーバプロバイダの遅延を満たすために取得ユーレカウィキ持つように多くの言葉で:
ユーレカクライアントからのすべての操作はユーレカ・サーバで、その後、他のユーレカのクライアントに反映させるためにいくつかの時間がかかることがあります。これは、新しい情報を反映するために定期的にリフレッシュされたユーレカサーバー上のペイロードのキャッシュです。ユーレカクライアントも定期的にデルタを取得します。変更は、すべてのユーレカクライアントに伝播するためにしたがって、それは2分かかることがあります。
最後の文で述べたように、サーバはすべてのクライアントに伝播する2分を必要とするかもしれ変更し、理由のためにカバーされていません。3つのユーレカ・キャッシュと発生する遅延があるためです。
- ユーレカサーバは、登録されたキャッシュのリストに、デフォルトの時間は30秒です。
- 登録情報へのアクセスのためのユーレカクライアントがキャッシュされ、デフォルトの時間は30秒です。
- 上記のリボンは、サービスユーレカクライアント、負荷分散キャッシュ30代の結果のリストを取得します。
- 春のクラウド環境でこれらのコンポーネント(ユーレカ、リボン)を使用していない場合は、サービスが起動してすぐユーレカに登録されますが、登録は、あなたがハートビート要求を送信する最初の時間まで待つ必要がありますありません。ハートビート要求送信間隔のデフォルトの30代。春の雲は、登録は、サービスの直後に開始します、修正を行っています。
ベースのサービス消費者サービスインスタンスは、情報を得るために、我々はサービスを呼び出すことができます。春クラウドは、サービスコールのサービス消費者のためのツールが豊富に用意されています。
- リボン、負荷分散クライアント。
- Hystrix、回路ブレーカ。
- 装う、RESTfulなWebサービスクライアント、リボンとHystrixの統合。
その後、我々は一つ一つを導入しました。
3.2サービスは--Ribbonのバランスをとるエンドロードを呼び出し、
リボンは、ネットフリックスは、オープンソースプロジェクトをリリースしている、主な機能は、RESTクライアントの負荷分散を実現することです。これは主に6つのコンポーネントで構成されています。
- サーバリスト、使用リストサーバの負荷分散。このリストは、ロードバランサにキャッシュされ、定期的に更新されます。リボンとユーレカと組み合わせて使用すると、サーバリスト実装クラスはDiscoveryEnabledNIWSServerListが、それはユーレカServerが登録されているサービスインスタンステーブルが保存されますです。
- ServerListFilter、サーバリストフィルタ。これは主に、サーバーのプレフィルターのリストを取得するにはサービスの消費者のために使用されるインタフェース、フィルタ結果もサーバリストです。リボンは、フィルタの様々なを達成するために提供しました。
- サービスインスタンスの生存戦略かどうかを検出するために、IPing。
- iRule、負荷分散戦略、その実装クラスのポリシーステートメントは、次のとおりです。応答時間などに応じて重み付けポーリング、ランダムに、。
我々はまた、このようなバージョン管理と直接接続構成を達成するためのサービスの利用に関する戦略の当社独自の実装として、独自の負荷分散ポリシーを定義することができます。実現後、実装クラスは、リボンに再注入することができます。
- ILoadBalancer、ロードバランサ。また、インターフェース、リボンは、ZoneAwareLoadBalancerなどの複数の実装を提供します。そのAPIを呼び出すことによって、上のコードのロードバランシング選択サービスコール。一般ILoadBalancer実装クラスはのiRuleを参照しています。
- RestClient、サービスコーラー。名前が示すように、これは、負荷分散、サービスプロバイダを開始するためのリボンツールREST要求です。
仕事で4つの物事を行いますリボン:
- 同じゾーンと少ないロードユーレカServerの好み。
- ユーレカとフィルタリングサービスインスタンスのリストから、定期的な更新。
- ユーザーが指定したポリシーによると、サービスの登録リストを取るためにServerインスタンスからアドレスを選択します。
- RestClientによるサービスコール。
3.3サービスが--Hystrix吹き終わりを呼び出します
ネットフリックスは、パターンブレーカーを達成Hystrixと呼ばれるライブラリを作成しました。「ブレーカ」は、交換サービスユニットが故障した装置自体、障害が(ヒューズと同様の)回路ブレーカーを監視、戻る発信者に期待に沿っている、応答は、代替的に(フォールバック)処理することができます代わりに、このように、それは、分散システムにおける障害の広がりを避けるため、とさえするように、長い間、不必要に占有されませんサービススレッドへの発信者を確保し、処理できない例外発信者を長い時間を待っているか、投げの雪崩。
もちろん、低い周波数で要求が失敗し、失敗の哺乳、または直接クライアントに戻します。失敗の数(デフォルトは20秒以内に5回失敗した)閾値に達した場合にのみ、回路ブレーカが開かれ、その後の通信を行うのではなく、直接別の応答を返されます。もちろん、代替応答Hystrixは、開発者によってカスタマイズすることができます。
隔離依存サービスを呼び出すことに加えて、Hystrixもリアルタイムコールモニタリング(そば提供Hystrixダッシュボード)、HystrixはHystrixにより、すべてのレコード実行情報に継続する要求を開始し、統計レポートやグラフの形でユーザに提示、含みますどのように多くの成功した要求の数の実行、秒あたりの失敗の数など。ネットフリックスはhystrixメトリックイベントストリームプロジェクトでこれらの指標のモニタリングを実現します。スプリングクラウドもHystrixダッシュボードを統合し、そして提供するビジュアルインターフェースにコンテンツを監視、HystrixダッシュボードのWikiマップ上の各インジケータの意味の詳細な説明に。
3.4サービスコール側のコードの抽象化とカプセル化--Feign
装うWebサービスのクライアントは、その目的は、Webサービスを簡単に呼び出しを行うために、宣言です。それは我々が不要になったが、明示的にこれらの二つの成分を使用するように、リボンとHystrixを統合しています。装うも、HTTP要求のためのテンプレートを提供し、書き込み、挿入注釈にシンプルなインターフェイスを通じて、我々は良い情報をHTTPリクエスト、フォーマット、アドレスなどのパラメータを定義することができます。次に、装う完全エージェントのHTTPリクエストは、私達はちょうどそれがサービス要求を完了することができます呼び出しと同じメソッドを呼び出す必要があります。
装うは、次の特性があります。
- 装うJAX-RS注釈やメモなどのプラグイン可能な注釈のサポート、
- HTTPプラグ可能なエンコーダおよびデコーダをサポート
- サポートHystrixとそのフォールバック
- サポートリボンのロードバランシング
- HTTPリクエストとレスポンスは圧縮をサポート
以下は装うの簡単な例です:
@SpringBootApplication
@EnableDiscoveryClient //启用Feign
@EnableFeignClients
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
@FeignClient(name = "elements", fallback = ElementsFallback.class) //指定feign调用的服务和Hystrix Fallback(name即eureka的application name)
public interface Elements
{
@RequestMapping(value = "/index")
String index();
}
//Hystrix Fallback
@Component
public class ElementsFallback implements Elements
{
@Override
public String index()
{
return "**************";
}
}
//测试类
@Component
public class TestController {
@Autowired
Elements elements;
@RequestMapping(value = "/testEureka", method = RequestMethod.GET)
public String testeureka()
{
return elements.index();
}
}
复制代码
原作:銭シャオ李
最後に書かれました:
いいえ、私はみんなの注目[新の一般公開歓迎コードとして冷静 ]、大量のJava関連の記事は、学習教材が内側になります材料を仕上げ、内側に更新されますが。
私は賞賛のポイントに書き込みに良い感じ、プラス信者が聖歌!注目点は、継続的に更新され、迷子にしないでください!!!