Spring Cloudソース分析のEureka編第二章:登録センター起動クラスの注解
9192 ワード
この章は「Spring Cloudソース分析」シリーズの文章の第二編で、私達は登録センターのEurekaからこの過程を始めます.
原文の住所:https://blog.csdn.net/boling_cavalry/articale/details/81809860
Spring Cloudソースのダウンロード
今日のソースコードの分析は主にspring-cloud-netflixのこのプロジェクトのソースコードです.バージョンは1.4.0.RELEASEです.第一編の『Spring Cloudソース分析のEureka編第一章:準備作業』の方法はGuHubでダウンロードしてください.
起動クラスのコメント
第一篇「Spring Cloudソース分析のEureka編第一章:準備作業」で作成された登録センターはspringclouddeepeurkaのスタートクラスのSpring clouddee peureka Appplication.javaのソースは以下の通りです.
注:EurekaServer MarkerConfigrationは、EurekaServer AutoConfigrationのアクティブ化に応答して使用されます.これはEurekaServer AutoConfigrationの2回目の登場です.3.前回の二回の注釈の提示によって、EurkaServer AutoConfigration類は必ず見なければならないので、この類を開けて、まず注釈を見ます.
eurekaの配置情報EurkaServer Configはどこから来ていますか?EurekaServer AutoConfigrationの内部クラスEurkaServer ConfigBenConfigrationは、これらの構成情報の生成を担当しています.例としては、Eurka Server ConfigBenです.
原文の住所:https://blog.csdn.net/boling_cavalry/articale/details/81809860
Spring Cloudソースのダウンロード
今日のソースコードの分析は主にspring-cloud-netflixのこのプロジェクトのソースコードです.バージョンは1.4.0.RELEASEです.第一編の『Spring Cloudソース分析のEureka編第一章:準備作業』の方法はGuHubでダウンロードしてください.
起動クラスのコメント
第一篇「Spring Cloudソース分析のEureka編第一章:準備作業」で作成された登録センターはspringclouddeepeurkaのスタートクラスのSpring clouddee peureka Appplication.javaのソースは以下の通りです.
package com.bolingcavalry.springclouddeepeureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class SpringclouddeepeurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringclouddeepeurekaApplication.class, args);
}
}
上記のコードは一般的なSpringBootの起動とは違って、複数の注釈@EnbaleEurekaServerにあります.今日のソース分析は全部この種類をめぐって展開されています.1.この注のソースコードを見てください./**
* Annotation to activate Eureka Server related configuration {@link EurekaServerAutoConfiguration}
*
* @author Dave Syer
* @author Biju Kunjummen
*
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(EurekaServerMarkerConfiguration.class)
public @interface EnableEurekaServer {
}
上記のコードの中で、注釈@Import(EurkaServer MarkConfigrations.class)は、EurkaServer MarkerConfigrationという類もbeanとして実用化されると述べています.なお、コメントの内容に注意してください.EurebaleEurekaServerはEureka Server関連の構成をアクティブにするために使用されます.EurekaServer AutoConfigrationは、EurkaServer AutoConfigrationが初めて私たちの前に現れました.2.次に実用化されたEurekaServer MarkerConfigrationのソースコードを見に行きます./**
* Responsible for adding in a marker bean to activate
* {@link EurekaServerAutoConfiguration}
*
* @author Biju Kunjummen
*/
@Configuration
public class EurekaServerMarkerConfiguration {
@Bean
public Marker eurekaServerMarkerBean() {
return new Marker();
}
class Marker {
}
}
上記のように、内部タイプのEurekaServer MarkerConfigration.Markerだけが簡単で、私の推測では、あるbeanはCondational OnBenを注釈して、自分が実用化されるかどうかの条件として、条件に対応するbeanはEurkarServer MarkConfigrations.Markerです.注:EurekaServer MarkerConfigrationは、EurekaServer AutoConfigrationのアクティブ化に応答して使用されます.これはEurekaServer AutoConfigrationの2回目の登場です.3.前回の二回の注釈の提示によって、EurkaServer AutoConfigration類は必ず見なければならないので、この類を開けて、まず注釈を見ます.
@Configuration
@Import(EurekaServerInitializerConfiguration.class)
@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)
@EnableConfigurationProperties({ EurekaDashboardProperties.class,
InstanceRegistryProperties.class })
@PropertySource("classpath:/eureka/server.properties")
以前の推測に合って、@Contintional OnBen(EurkaServer MarkConfigrations.Markerc.lass)で注釈して、EurkaServer AutoConfigration類が実際化されてからspring容器に登録されることを保証しました.つまり、この中の配置はすべて有効になりました.4.続いてスプリング容器はbeanを実例化し、初期化しました.重点的に注目するのはEurkaServer Initializer Configration、EurkaServer Controtxt、EurkaServer Bootstrapの三つです.5.EurkaServer AutoConfigrationの@Bean注釈会は、EurekaServer Conteet、EurkaServer Bootstrapを実例化し、この二つの例はすでにSpring Cloudプロジェクトの内容ではなく、それらはすべてcomp.netflix.eurkaから来ています.それらは本物のEurekaServer起動ロジックを引き継ぎました.@Bean
public EurekaServerContext eurekaServerContext(ServerCodecs serverCodecs,
PeerAwareInstanceRegistry registry, PeerEurekaNodes peerEurekaNodes) {
return new DefaultEurekaServerContext(this.eurekaServerConfig, serverCodecs,
registry, peerEurekaNodes, this.applicationInfoManager);
}
@Bean
public EurekaServerBootstrap eurekaServerBootstrap(PeerAwareInstanceRegistry registry,
EurekaServerContext serverContext) {
return new EurekaServerBootstrap(this.applicationInfoManager,
this.eurekaClientConfig, this.eurekaServerConfig, registry,
serverContext);
}
6.EurekaServer Initializer Configrationという類がEurkaServer AutoConfigrationの注釈に登場し、@Importで注釈して実用化され、Lifecycleインターフェースを実現したので、spring容器にフィードバックされる方法:@Override
public void start() {
new Thread(new Runnable() {
@Override
public void run() {
try {
//TODO: is this class even needed now?
eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);
log.info("Started Eureka Server");
// , EurekaServer
publish(new EurekaRegistryAvailableEvent(getEurekaServerConfig()));
EurekaServerInitializerConfiguration.this.running = true;
// , EurekaServer
publish(new EurekaServerStartedEvent(getEurekaServerConfig()));
}
catch (Exception ex) {
// Help!
log.error("Could not initialize Eureka servlet context", ex);
}
}
}).start();
}
上記のように、EurkaServer Initializer Configrationが初期化されたときには、アクティブにbootstrapの初期化方法を起動する以外に、eurekaの設定情報を放送により送信します.eurekaの配置情報EurkaServer Configはどこから来ていますか?EurekaServer AutoConfigrationの内部クラスEurkaServer ConfigBenConfigrationは、これらの構成情報の生成を担当しています.例としては、Eurka Server ConfigBenです.
@Configuration
protected static class EurekaServerConfigBeanConfiguration {
@Bean
@ConditionalOnMissingBean
public EurekaServerConfig eurekaServerConfig(EurekaClientConfig clientConfig) {
EurekaServerConfigBean server = new EurekaServerConfigBean();
if (clientConfig.shouldRegisterWithEureka()) {
// Set a sensible default if we are supposed to replicate
server.setRegistrySyncRetries(5);
}
return server;
}
}
ここまで、私達はEnbleeurkaServerに対してもっと深く理解しました.登録センターを作るために必要なコードは少ないですが、複雑な初期化サービスが背後に隠れています.皆様の素晴らしい設計に感謝します.複雑なロジックを封入して、業務テストを軽級で完成させます.