Spring Bootインタビューの質問

  • Spring Boot

  • link:/tag/interview/ [インタビュー]

1. 前書き

導入以来、Spring BootはSpringエコシステムの重要な役割を果たしてきました。 このプロジェクトは、その自動構成機能により私たちの生活をずっと楽にします。
このチュートリアルでは、就職の面接中に出てくる可能性のあるSpring Bootに関連する最も一般的な質問のいくつかをカバーします。

参考文献:

Top Spring Frameworkインタビューの質問

就職の面接中に出てくる可能性のあるSpring Frameworkに関する一般的な質問の簡単な議論。
link:/spring-interview-questions [詳細]↠’

SpringとSpring Bootの比較

SpringとSpring Bootの違いを理解してください。
link:/spring-vs-spring-boot [続きを読む]→

2. 質問

Q1. SpringとSpring Bootの違いは何ですか?

Spring Frameworkは、Webアプリケーションの開発を容易にする複数の機能を提供します。 これらの機能には、依存性注入、データバインディング、アスペクト指向プログラミング、データアクセスなどが含まれます。
長年にわたり、Springはますます複雑になっており、このようなアプリケーションに必要な構成の量は恐ろしいものです。 これは、Spring Bootが役立つ場所です。Springアプリケーションの設定が簡単になります。
本質的に、Springは未開発ですが、* Spring Bootはプラットフォームとライブラリの見解を取り入れて、すぐに始められるようにします。*
Spring Bootがもたらす最も重要な利点は次の2つです。
  • で見つかったアーティファクトに基づいてアプリケーションを自動構成します
    クラスパス

  • 運用中のアプリケーションに共通の非機能機能を提供し、
    セキュリティまたはヘルスチェックなど

    link:/spring-vs-spring-boot [バニラスプリングとスプリングブートの詳細な比較]については、他のチュートリアルのいずれかを確認してください。

Q2. MavenでSpring Bootアプリケーションを設定するにはどうすればよいですか?

他のライブラリと同様に、MavenプロジェクトにSpring Bootを含めることができます。 ただし、最良の方法は、_spring-boot-starter-parent_プロジェクトから継承し、https://www.baeldung.com/spring-boot-starters [Spring Boot starters]への依存関係を宣言することです。 これにより、プロジェクトでSpring Bootのデフォルト設定を再利用できます。
_spring-boot-starter-parent_プロジェクトを継承するのは簡単です– _pom.xml_で_parent_要素を指定するだけです:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
</parent>
https://search.maven.org/search?q=g:org.springframework.boot%20AND%20a:spring-boot-starter-parent&core=gavで_spring-boot-starter-parent_の最新バージョンを見つけることができます[Maven Central]。
*スターター親プロジェクトの使用は便利ですが、常に実行可能ではありません。*たとえば、すべてのプロジェクトが標準POMから継承する必要がある場合、Spring Bootスターター親に依存することはできません。
この場合、このPOM要素を使用して依存関係管理の利点を引き続き得ることができます。
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
最後に、Spring Bootスターターにいくつかの依存関係を追加できます。

Q3. 利用可能なSpring Boot Starterは何ですか?

依存関係管理は、プロジェクトの重要な側面です。 プロジェクトが非常に複雑な場合、関連するアーティファクトが多すぎるため、依存関係の管理が悪夢に変わる可能性があります。
これは、Spring Bootスターターが便利な場所です。 各スターターは、必要なすべてのSpringテクノロジーのワンストップショップとしての役割を果たします。 その後、他の必要な依存関係が一時的に引き込まれ、一貫した方法で管理されます。
すべてのスターターは_org.springframework.boot_グループの下にあり、名前はnames_spring-boot-starter-_で始まります。 *この名前付けパターンにより、特に名前による依存関係の検索をサポートするIDEで作業する場合、スターターを簡単に見つけることができます。*
この記事の執筆時点では、50以上のスターターが用意されています。 最も一般的に使用されるのは:
  • spring-boot-starter: coreスターター、自動構成を含む
    サポート、ロギング、YAML

  • _spring-boot-starter-aop:_アスペクト指向プログラミングのスターター
    Spring AOPおよびAspectJを使用

  • spring-boot-starter-data-jpa: starter with Spring Data JPA with using
    休止状態

  • spring-boot-starter-jdbc: HikariCPでJDBCを使用するためのスターター
    接続プール

  • spring-boot-starter-security: Spring Securityを使用するためのスターター

  • spring-boot-starter-test: Spring Bootをテストするためのスターター
    用途

  • _spring-boot-starter-web:_ウェブを構築するためのスターター。
    Spring MVCを使用したRESTfulなアプリケーション

    スターターの完全なリストについては、https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-starters [このリポジトリ]をご覧ください。
    Spring Bootスターターの詳細については、https://www.baeldung.com/spring-boot-starters [Spring Boot Startersの紹介]をご覧ください。

Q4. 特定の自動構成を無効にする方法

特定の自動構成を無効にする場合は、_ @ EnableAutoConfiguration_アノテーションの_exclude_属性を使用して指定できます。 たとえば、次のコードスニペットは_DataSourceAutoConfiguration_を無効にします。
// other annotations
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }
メタ注釈として_ @ EnableAutoConfiguration_を含む_ @ SpringBootApplication_注釈で自動構成を有効にした場合、同じ名前の属性で自動構成を無効にできます。
// other annotations
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }
_spring.autoconfigure.exclude_環境プロパティを使用して自動構成を無効にすることもできます。 application.propertiesファイルのこの設定は、以前と同じことを行います。
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Q5. カスタム自動構成を登録する方法

自動構成クラスを登録するには、_META-INF / spring.factories_ファイルの_EnableAutoConfiguration_キーの下に完全修飾名をリストする必要があります。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration
Mavenを使用してプロジェクトをビルドする場合、そのファイルは_resources / META-INF_ディレクトリーに配置する必要があり、_package_フェーズ中に上記の場所に配置されます。

Q6. Beanが存在する場合に自動構成に戻るように指示する方法

Beanがすでに存在する場合に自動構成クラスにバックオフするよう指示するには、_ @ ConditionalOnMissingBean_アノテーションを使用できます。 この注釈の最も顕著な属性は次のとおりです。
  • _value:_チェックするBeanのタイプ

  • _name:_チェックするBeanの名前

    _ @ Bean_で装飾されたメソッドに配置すると、ターゲットタイプはデフォルトでメソッドの戻り値タイプになります。
@Configuration
public class CustomConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public CustomService service() { ... }
}

Q7. Spring Boot WebアプリケーションをJarおよびWarファイルとして展開する方法

従来、WebアプリケーションをWARファイルとしてパッケージ化し、それを外部サーバーにデプロイしていました。 これにより、同じサーバー上に複数のアプリケーションを配置できます。 CPUとメモリが不足している間、これはリソースを節約する素晴らしい方法でした。
しかし、状況は変わりました。 現在、コンピューターのハードウェアはかなり安価であり、サーバーの構成に注意が向けられています。 展開中にサーバーを構成する際の小さな間違いは、壊滅的な結果につながる可能性があります。
  • Springは、プラグイン、つまり_spring-boot-maven-plugin_を提供してこの問題に対処し、Webアプリケーションを実行可能JAR *としてパッケージ化します。 このプラグインを含めるには、_plugin_要素を_pom.xml_に追加するだけです。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
このプラグインを配置すると、_package_フェーズの実行後に太いJARが取得されます。 このJARには、組み込みサーバーを含む、必要なすべての依存関係が含まれています。 したがって、外部サーバーの構成について心配する必要はなくなりました。
その後、通常の実行可能JARと同じようにアプリケーションを実行できます。
JARファイルを作成するには、_pom.xml_ファイルの_packaging_要素を_jar_に設定する必要があることに注意してください。
<packaging>jar</packaging>
この要素を含めない場合、_jar_もデフォルトになります。
WARファイルを作成する場合は、_packaging_ elementを_war_に変更します。
<packaging>war</packaging>
そして、パッケージ化されたファイルからコンテナの依存関係を除外します。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
Maven _package_フェーズを実行すると、デプロイ可能なWARファイルが作成されます。

Q8. コマンドラインアプリケーションにSpring Bootを使用する方法

他のJavaプログラムと同様に、Spring Bootコマンドラインアプリケーションには_main_メソッドが必要です。 このメソッドはエントリポイントとして機能し、_SpringApplication#run_メソッドを呼び出してアプリケーションをブートストラップします。
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class);
        // other statements
    }
}
_SpringApplication_クラスは、Springコンテナーを起動し、Beanを自動構成します。
プライマリ構成ソースとして機能するには、構成クラスを_run_メソッドに渡す必要があることに注意してください。 慣例により、この引数はエントリクラスそのものです。
_run_メソッドを呼び出した後、通常のプログラムと同様に他のステートメントを実行できます。

Q9. 外部構成の可能なソースは何ですか?

Spring Bootは外部設定のサポートを提供するため、さまざまな環境で同じアプリケーションを実行できます。 プロパティファイル、YAMLファイル、環境変数、システムプロパティ、およびコマンドラインオプション引数を使用して、構成プロパティを指定できます。
_ @ Value_アノテーション、, https://www.baeldung.com/configuration-properties-in-spring-boot [the _ @ ConfigurationProperties_アノテーション]、または_Environment_抽象化を介してバインドされたオブジェクトを使用して、これらのプロパティにアクセスできます。 。
外部設定の最も一般的なソースは次のとおりです。
  • コマンドラインプロパティ:コマンドラインオプションの引数はプログラムです
    _–server.port = 8080_など、二重ハイフンで始まる引数。 Spring Bootはすべての引数をプロパティに変換し、それらを環境プロパティのセットに追加します。

  • アプリケーションプロパティ:アプリケーションプロパティは、
    _application.properties_ファイルまたはそのYAML対応物。 デフォルトでは、Spring Bootは現在のディレクトリ、クラスパスルート、またはそれらの_config_サブディレクトリでこのファイルを検索します。

  • プロファイル固有のプロパティ:プロファイル固有のプロパティがロードされます
    _application-\ {profile} .properties_ファイルまたは対応するYAMLファイルから。 _ \ {profile} _プレースホルダーは、アクティブなプロファイルを指します。 これらのファイルは、非特定のプロパティファイルと同じ場所にあり、それらより優先されます。

Q10. Spring Bootが緩和されたバインディングをサポートするということはどういう意味ですか?

Spring Bootの緩和されたバインディングは、https://www.baeldung.com/configuration-properties-in-spring-boot [構成プロパティのタイプセーフバインディング]に適用されます。
緩和されたバインディングでは、環境プロパティのキーがプロパティ名と完全に一致する必要はありません。 このような環境プロパティは、camelCase、kebab-case、snake_case、またはアンダースコアで区切られた単語の大文字で記述できます。
たとえば、_ @ ConfigurationProperties_アノテーションを持つBeanクラスのプロパティの名前が_myProp_である場合、_myProp _、_ my-prop _、_ my_prop_、または_MY_PROP_のいずれかの環境プロパティにバインドできます。

* Q11。 * Spring Boot Devtoolsの使用目的*

Spring Boot Developer Tools、またはDevToolsは、開発プロセスを簡単にするツールのセットです。 これらの開発時機能を含めるには、_pom.xml_ファイルに依存関係を追加するだけです。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
アプリケーションが実稼働環境で実行されている場合、_spring-boot-devtools_モジュールは自動的に無効になります。 アーカイブの再パッケージ化では、デフォルトでこのモジュールも除外されます。 したがって、最終製品にオーバーヘッドが生じることはありません。
デフォルトでは、DevToolsは開発環境に適したプロパティを適用します。 これらのプロパティは、テンプレートキャッシュを無効にし、Webグループのデバッグログを有効にします。 その結果、プロパティを設定せずに、この賢明な開発時の構成を使用できます。
クラスパス上のファイルが変更されるたびに、DevToolsを使用するアプリケーションが再起動します。 これは、変更に対する迅速なフィードバックを提供するため、開発において非常に役立つ機能です。
デフォルトでは、ビューテンプレートを含む静的リソースは再起動を開始しません。 代わりに、リソースの変更がブラウザーの更新をトリガーします。 これは、LiveReload拡張機能がブラウザーにインストールされており、DevToolsに含まれている埋め込みLiveReloadサーバーと対話する場合にのみ発生することに注意してください。
このトピックの詳細については、https://www.baeldung.com/spring-boot-devtools [Spring Boot DevToolsの概要]を参照してください。

* Q12。 統合テストの書き方*

Springアプリケーションの統合テストを実行する場合、_ApplicationContext_が必要です。
私たちの生活を楽にするために、Spring Bootはテスト用の特別な注釈を提供します– _ @ SpringBootTest_。 この注釈は、_classes_属性で示される構成クラスから_ApplicationContext_を作成します。
  • classes_属性が設定されていない場合、Spring Bootはプライマリ構成クラスを検索します。*検索は、 @ SpringBootApplication_または_ @ SpringBootConfiguration_アノテーションが付けられたクラスを見つけるまで、テストを含むパッケージから開始します。

    JUnit 4を使用する場合は、_ @ RunWith(SpringRunner.class)_を使用してテストクラスを修飾する必要があります。
    詳細な手順については、https://www.baeldung.com/spring-boot-testing [Spring Bootでのテスト]のチュートリアルをご覧ください。

Q13 。 スプリングブートアクチュエータの使用目的

本質的に、Actuatorは、本番環境向けの機能を有効にすることにより、Spring Bootアプリケーションに命を吹き込みます。 これらの機能により、実稼働環境で実行中のアプリケーションを監視および管理できます。
Spring Boot Actuatorをプロジェクトに統合するのは非常に簡単です。 必要なことは、_pom.xml_ファイルに_spring-boot-starter-actuator_スターターを含めることだけです。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Spring Boot Actuatorは、HTTPまたはJMXエンドポイントのいずれかを使用して操作情報を公開できます。 ただし、ほとんどのアプリケーションはHTTPを使用しますが、エンドポイントのIDと_ / actuator_プレフィックスがURLパスを形成します。
以下に、Actuatorが提供する最も一般的な組み込みエンドポイントの一部を示します。
  • _auditevents:_監査イベント情報を公開します

  • _env:_環境プロパティを公開します

  • _health:_アプリケーションの正常性情報を表示

  • httptrace: HTTPトレース情報を表示します

  • _info:_任意のアプリケーション情報を表示します

  • _metrics:_メトリック情報を表示します

  • _loggers:_ロガーの構成を表示および変更します
    応用

  • mappings:_すべての @ RequestMapping_パスのリストを表示します

  • _scheduledtasks:_アプリケーションのスケジュールされたタスクを表示します

  • _threaddump:_スレッドダンプを実行します

    詳細な概要については、https://www.baeldung.com/spring-boot-actuators [Spring Boot Actuator tutorial]を参照してください。

3. 結論

このチュートリアルでは、技術面接で直面する可能性のあるSpring Bootに関する最も重要な質問をいくつか取り上げました。 彼らがあなたの夢の仕事を見つける助けになることを願っています。