Spring Cloudソース分析のEureka編第二章:登録センター起動クラスの注解


この章は「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のソースは以下の通りです.
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に対してもっと深く理解しました.登録センターを作るために必要なコードは少ないですが、複雑な初期化サービスが背後に隠れています.皆様の素晴らしい設計に感謝します.複雑なロジックを封入して、業務テストを軽級で完成させます.