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を作成するよりも、作成されます。
遅延初期化を開始するには、次の方法:
SpringApplicationBuilder
スタート
org.springframework.boot.builder.SpringApplicationBuilder#lazyInitialization
SpringApplication
指定
org.springframework.boot.SpringApplication#setLazyInitialization
- 構成プロパティ
spring.main.lazy-initialization=true
あなたが使用することができ、豆の遅延初期化を使用して@Lazy
注釈を。
4.1.3。カスタムバナー
banner.txt
又は画像ファイル(banner.gif
、banner.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
ApplicationStartingEvent
動作開始を送信するが、ときに任意の処理の前に送信される(初期化手順とリスナ登録を除きます)。
listeners.starting();
ApplicationEnvironmentPreparedEvent
コンテキストは、既知の使用に送信されるコンテキストが作成されますが、前の環境。
ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
ApplicationContextInitializedEvent
でApplicationContext
準備と呼ばれてきたApplicationContextInitializers
後、しかし、送信されたBean定義、前にロードされていません。
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
listeners.contextPrepared(context);
ApplicationPreparedEvent
しかし、スタートをリフレッシュする前にBean定義をロードした後に送られました。
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
listeners.contextLoaded(context);
ApplicationStartedEvent
コンテキストがリフレッシュされた後、しかしapplication runners
、そしてcommand-line runners
前者は、呼び出され送信されます。
listeners.started(context);
ApplicationReadyEvent
ではapplication runners
とcommand-line runners
呼ばれた後に送信されます。これは、アプリケーションが要求を処理する準備ができていることを示しています。
listeners.running(context);
ApplicationFailedEvent
ときに異常な送信を開始します。
handleRunFailure(context, ex, exceptionReporters, listeners);
で、追加のイベントApplicationPreparedEvent
とApplicationStartedEvent
トランスミッションの間に:
ContextRefreshedEvent
でApplicationContext
リフレッシュを送信します。WebServerInitializedEvent
WebServerの準備を送った後。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.ApplicationArgumentsBean
。ApplicationArguments
インターフェイスは、元を提供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
、あなたは、いくつかの特定のコードを実行する必要があり、実現することが可能であるApplicationRunner
かCommandLineRunner
のインタフェース。両方のインターフェイスは、同じように動作し、そして完了する前に呼び出され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終了
それぞれのSpringApplication
JVMにシャットダウンフックを確実にするために、登録されてい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
プロパティを取得します。