20191110春ブーツ公式文書学習(4.1)

4.春のブート機能

4.1。Springアプリケーション

起動するための便利な方法:

public static void main(String[] args) {
    SpringApplication.run(MySpringConfiguration.class, args);
}

SpingBootデフォルトのロギングレベルがありますINFO

4.1.1。起動に失敗しました。

あなたが失敗を起動すると、FailureAnalyzersエラーメッセージを報告します。

4.1.2。遅延初期化(遅延ロード)

SpringApplication許容遅延は、アプリケーションを初期化します。あなたが怠惰な初期化を有効にすると、必要に応じて、豆ではなく、アプリケーションの起動時にBeanを作成するよりも、作成されます。

遅延初期化を開始するには、次の方法:

  1. SpringApplicationBuilderスタート
org.springframework.boot.builder.SpringApplicationBuilder#lazyInitialization
  1. SpringApplication指定
org.springframework.boot.SpringApplication#setLazyInitialization
  1. 構成プロパティ
spring.main.lazy-initialization=true

あなたが使用することができ、豆の遅延初期化を使用して@Lazy注釈を。

4.1.3。カスタムバナー

banner.txt又は画像ファイル(banner.gifbanner.jpgまたはbanner.png)クラスパスに、またはプロパティ指定されたパス設定してspring.banner.location(イメージspring.banner.image.location)。画像はに変換されますASCII

banner.txt:内部文書は、次のプレースホルダのいずれかを使用することができ、参照
説明|可変
--- | ---
${application.version}として、アプリケーションのバージョン番号| MANIFEST.MFメディア。例えば、インプリメンテーション・バージョン:1.0 1.0印刷。
${application.formatted-version}| MANIFEST.MFのように、あなたのアプリケーションのバージョン番号、および形式(括弧内、および接頭vで)。例えば(v1.0を)。
${spring-boot.version}|使用している春のブートバージョン。例2.2.0.RELEASEため。
${spring-boot.formatted-version}|春のブートを使用しているバージョンは、表示用のフォーマット(ブラケット付き、および接頭辞vで)。例えば(v2.2.0.RELEASE)。
${Ansi.NAME}(あるいは${AnsiColor.NAME}${AnsiBackground.NAME}${AnsiStyle.NAME})| NAMEは、ANSIのエスケープコードの名前です。詳細については、以下を参照してくださいAnsiPropertySource
${application.title}|アプリケーションのタイトルに、MANIFEST.MFで説明したように。実装例-タイトルについて:MyAppには、MyAppのように印刷しました。

使用すると、org.springframework.boot.SpringApplication#setBannerプログラムによって生成されましたBanner

属性にはspring.main.banner-mode、印刷バナー方法を指定します。

ビーンIDの単一のインスタンスを印刷バナーは次のとおりspringBootBanner

4.1.4。カスタムSpringApplication

渡されたSpringApplicationコンストラクタパラメータスプリングビーン設定ソースです。ほとんどの場合、これらはのためにある@Configurationクラスへの参照が、彼らはまた、XML設定を参照することができ、またはパッケージをスキャンする必要があります。

また、使用することができますapplication.propertiesファイルを設定します。詳細情報を参照してくださいSpringApplication

設定オプションの完全なリストについては、を参照してくださいorg.springframework.boot.SpringApplication

4.1.5。ストリーミングビルダーAPI

org.springframework.boot.builder.SpringApplicationBuilder

例:

new SpringApplicationBuilder(SpringbootApplication.class).profiles("server")
        .properties("transport=local").run(args);

作成しApplicationContext、いくつかの制約階層を。例では、Webコンポーネントは、子コンテキストと親に含まれていなければならないと子供が同じコンテキストを使用しますEnvironment

4.1.6。アプリケーションイベントとリスナー

一部のイベントは、実際に作成されApplicationContextたトリガする前に、あなたがリスナーとして登録することができない@Beanイベントをリッスンします。あなたは使用することができるSpringApplication.addListeners(...)方法またはSpringApplicationBuilder.listeners(...)それらのメソッドを登録します。

あなたはこれらのリスナーは、アプリケーションを作成する方法にかかわらず、道の、自動的に登録されたい場合は、できるMETA-INF/spring.factoriesプロジェクトにファイルを追加し、使用してorg.springframework.context.ApplicationListener次の例のように、キー参照をあなたのリスナーを:

org.springframework.context.ApplicationListener = com.example.project.MyListener

開始のための分析方法
org.springframework.boot.SpringApplication#run(java.lang.String...)
、アプリケーションが実行されている場合には、次の順序で送信されたアプリケーションは、これらのイベントは、に結びついていますSpringApplication上SpringApplicationEvents

  1. ApplicationStartingEvent動作開始を送信するが、ときに任意の処理の前に送信される(初期化手順とリスナ登録を除きます)。
listeners.starting();
  1. ApplicationEnvironmentPreparedEventコンテキストは、既知の使用に送信されるコンテキストが作成されますが、前の環境。
ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
  1. ApplicationContextInitializedEventApplicationContext準備と呼ばれてきたApplicationContextInitializers後、しかし、送信されたBean定義、前にロードされていません。
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
listeners.contextPrepared(context);
  1. ApplicationPreparedEventしかし、スタートをリフレッシュする前にBean定義をロードした後に送られました。
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
listeners.contextLoaded(context);
  1. ApplicationStartedEventコンテキストがリフレッシュされた後、しかしapplication runners、そしてcommand-line runners前者は、呼び出され送信されます。
listeners.started(context);
  1. ApplicationReadyEventではapplication runnerscommand-line runners呼ばれた後に送信されます。これは、アプリケーションが要求を処理する準備ができていることを示しています。
listeners.running(context);
  1. ApplicationFailedEventときに異常な送信を開始します。
handleRunFailure(context, ex, exceptionReporters, listeners);

で、追加のイベントApplicationPreparedEventApplicationStartedEventトランスミッションの間に:

  1. ContextRefreshedEventApplicationContextリフレッシュを送信します。
  2. WebServerInitializedEventWebServerの準備を送った後。ServletWebServerInitializedEventそして、ReactiveWebServerInitializedEventサーブレットサーブレットと変種応答性です。

アプリケーションイベントは春Frameworkのイベント・パブリッシング・メカニズムを使用して送信されます。リスナーに子コンテキストでポストされたイベントの一部は、任意の祖先コンテキストでリスナーにリリースされることをこの機構が保証されます。アプリケーションが使用するのであれば、SpringApplication階層インスタンスを、リスナーがイベントの同じタイプのアプリケーションの複数のインスタンスを受け取ることができます。

リスナーがイベントやコンテキストが、それはそのアプリケーション・コンテキストを注入要求し、その後、イベントのコンテキストとの比較の文脈の中に注入する必要があること、イベントの将来のコンテキストを区別できるようにします。それを達成することができるApplicationContextAwareリスナーは、Bean、使用された場合、コンテキストを注入することによって、又は@Autowired注入文脈。

4.1.7.Web環境

SpringApplication正しいタイプを作成しようとしていますApplicationContext決定するWebApplicationTypeアルゴリズムは非常に簡単です:

  • ある場合はSpring MVC、使用がAnnotationConfigServletWebServerApplicationContext
  • ノーがある場合はSpring MVC、そこにSpring WebFlux、使用AnnotationConfigReactiveWebServerApplicationContext
  • それ以外の場合は、AnnotationConfigApplicationContext

参考資料:

org.springframework.boot.SpringApplication#run(java.lang.String...)
    context = createApplicationContext();


org.springframework.boot.SpringApplication#SpringApplication(org.springframework.core.io.ResourceLoader, java.lang.Class<?>...)
    this.webApplicationType = WebApplicationType.deduceFromClasspath();

同じアプリケーションで使用Spring MVCし、Spring WebFlux新機能、それがデフォルトで使用されますSpring MVC呼び出すことにより、org.springframework.boot.SpringApplication#setWebApplicationType簡単にそれをカバーしています。あなたも呼び出すことができますorg.springframework.boot.SpringApplication#setApplicationContextClass直接ApplicationContext

4.1.8。Accessアプリケーションのパラメータ

あなたがアクセスパスが必要な場合は给SpringApplication.run(...)アプリケーションのパラメータを、あなたが噴射することができますorg.springframework.boot.ApplicationArgumentsBeanApplicationArgumentsインターフェイスは、元を提供String[]だけでなく、以下の例示的なパラメータは、アクセスオプションおよび非オプションパラメータ解決は次のとおりです。

@Component
public class MyBean {
    @Autowired
    public MyBean(ApplicationArguments args) {
        boolean debug = args.containsOption("debug");
        List<String> nonOptionArgs = args.getNonOptionArgs();
        // if run with "--debug logfile.txt" debug=true, files=["logfile.txt"]
    }
}

春ブーツも春に環境を登録しましたCommandLinePropertySourceこのように、あなたも使用することができ@Value、単一のアプリケーションパラメータを注入する注釈を。

4.1.9。使用ApplicationRunnerまたはCommandLineRunner

あなたが起動した場合SpringApplication、あなたは、いくつかの特定のコードを実行する必要があり、実現することが可能であるApplicationRunnerCommandLineRunnerのインタフェース。両方のインターフェイスは、同じように動作し、そして完了する前に呼び出されSpringApplication.runにおける単一の実行方法(...)を提供します。

参考資料:

org.springframework.boot.SpringApplication#run(java.lang.String...)
    callRunners(context, applicationArguments);

ない非同期呼び出したときにランナーが、ApplicationStartedEventイベントとApplicationReadyEvent間で実行されています。

ApplicationRunnerそして、CommandLineRunner異なるパラメータ、前者のものとインターフェイスが異なるApplicationArguments、後者String...

複数のランナーが存在する場合、実行の順序を実装することができる特定する必要があるorg.springframework.core.Orderedインタフェースまたはorg.springframework.core.annotation.Order注釈を。

4.1.10.Application終了

それぞれのSpringApplicationJVMにシャットダウンフックを確実にするために、登録されていApplicationContext終了時にノーマルクローズを。あなたは、すべての標準のSpringライフサイクルコールバック(例えば、使用することができるDisposableBeanインタフェースまたは@PreDestroy注釈を)。

あなたがしたい場合はSpringApplication.exit()、特定の終了コードを返すと呼ばれ、あなたが実装できるorg.springframework.boot.ExitCodeGeneratorインタフェースを。このコードは、その後、出口に渡されSystem.exit()たステータスコードとして返されるように、。

さらに、Exception達成するためExitCodeGeneratorのインタフェースを例外がスローされると、スプリングブートによって返さ実装getExitCode()方法を提供終了コード。

例:

@SpringBootApplication
public class SpringbootApplication {

    @Bean
    public ExitCodeGenerator exitCodeGenerator() {
        return () -> 42;
    }

    public static void main(String[] args) {
        System.exit(SpringApplication.exit(SpringApplication.run(SpringbootApplication.class,
                args)));
    }

}

直接の停止は、仮想マシンは、特定の終了コードを返すことができません。

4.1.11。管理者機能

指定することでspring.application.admin.enabled、アプリケーションのプロパティに関連する管理者機能を有効にすることができます。これは、プラットフォームのMBeanServerにオープンしますSpringApplicationAdminMXBeanあなたは、リモートで春ブートアプリケーションを管理するには、この機能を使用することができます。また、この機能は有用である可能性があるすべてのサービスパッケージのために実装されています。

あなたはHTTPポートを実行する上でアプリケーションを知りたい場合は、キーしてくださいlocal.server.portプロパティを取得します。

おすすめ

転載: www.cnblogs.com/huangwenjie/p/11831512.html