1概要

コアリンク:/spring-boot-start[Spring Boot]開発者は、一般的なオープンソースプロジェクトのほとんどに

スターター

を提供していますが、これらに限定されません。

  • 独自のカスタムスターターを作成することもできます** 。組織内で使用するための内部ライブラリがある場合は、Spring Bootのコンテキストで使用する予定がある場合は、そのためのスターターも作成することをお勧めします。

これらのスターターにより、開発者は長い設定を避けて開発をすぐに始めることができます。しかし、バックグラウンドで多くのことが行われているため、アノテーションによって

pom.xml

に依存関係を追加するだけで非常に多くの機能が有効になる方法を理解するのが困難になることがあります。

この記事では、舞台裏で何が起こっているのかを見るために、Spring Bootのマジックについて説明します。それから、これらの概念を使用して、独自のカスタムライブラリのスターターを作成します。


2 Spring Bootの自動設定をわかりやすく説明する


2.1. 自動設定クラス

Spring Bootは起動時に、クラスパスで

spring.factories

という名前のファイルを探します。このファイルは

META-INF

ディレクトリにあります。

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

このファイルは、Spring Bootが実行しようとするさまざまな設定クラスに名前をマッピングします。したがって、このスニペットに従って、Spring BootはRabbitMQ、Cassandra、MongoDB、およびHibernateのすべての設定クラスを実行しようとします。

これらのクラスが実際に実行されるかどうかは、クラスパス上の依存クラスの存在によって異なります。たとえば、MongoDBのクラスがクラスパスにある場合は、


https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/になります。

java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java[MongoAutoConfiguration]

が実行され、すべてのmongo関連のBeanが初期化されます。

この条件付き初期化は、


@ConditionalOnClass


アノテーションによって有効になります。その使用方法を確認するには、

MongoAutoConfiguration

クラスのコードスニペットを見てみましょう。

@Configuration
@ConditionalOnClass(MongoClient.class)
@EnableConfigurationProperties(MongoProperties.class)
@ConditionalOnMissingBean(type = "org.springframework.data.mongodb.MongoDbFactory")
public class MongoAutoConfiguration {
   //configuration code
}



MongoClient


がクラスパスで使用可能な場合 – この構成クラスは、初期化された

MongoClient

を使用してSpring Beanファクトリーを生成しながら実行されます。デフォルトの設定で。


2.2.

application.properties

ファイルからのカスタムプロパティ

Spring Bootは事前設定されたデフォルトを使用してBeanを初期化します。これらのデフォルトを上書きするために、我々は通常

application.properties

ファイルでそれらを特定の名前で宣言します。これらのプロパティは、Spring Bootコンテナによって自動的に取得されます。

それがどのように機能するのか見てみましょう。


MongoAutoConfiguration

のコードスニペットでは、

@ EnableConfigurationProperties

アノテーションがhttps://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/mainで宣言されています。カスタムプロパティのコンテナとして機能する/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java[

MongoProperties

]クラス

@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoProperties {

    private String host;

   //other fields with standard getters and setters
}

接頭辞とフィールド名は、

application.properties

ファイル内のプロパティの名前になります。そのため、MongoDBに

host

を設定するには、プロパティファイルに次のように記述するだけです。

spring.data.mongodb.host = localhost

同様に、クラス内の他のフィールドの値は、プロパティファイルを使用して設定できます。


3カスタムスターターの作成

セクション2の概念に基づいて、カスタムスターターを作成するには、次のコンポーネントを書く必要があります。

  1. 私達のライブラリのための自動設定クラスとプロパティクラス

カスタム設定用

  1. ライブラリとライブラリの依存関係を取り込むための初心者

自動設定プロジェクト

デモンストレーションのために、私たちはhttps://github.com/eugenp/tutorials/tree/master/spring-boot-custom-starter[簡単なあいさつ文ライブラリー]を作成しました。グリーティングメッセージを出力します。自動構成モジュールとスターターモジュールの使用方法を示すために、サンプルのSpring Bootアプリケーションも作成します。


3.1. 自動設定モジュール

自動設定モジュールを「度 – スプリング – ブート – 自動設定」と呼びます。このモジュールは2つの主要なクラス、すなわち

application.properties

fileを通してカスタムプロパティを設定することを可能にする

GreeterProperties



greeter

ライブラリのためのbeanを作成する

GreeterAutoConfiguartion

を持つでしょう。

両方のクラスのコードを見てみましょう。

@ConfigurationProperties(prefix = "baeldung.greeter")
public class GreeterProperties {

    private String userName;
    private String morningMessage;
    private String afternoonMessage;
    private String eveningMessage;
    private String nightMessage;

   //standard getters and setters

}

@Configuration
@ConditionalOnClass(Greeter.class)
@EnableConfigurationProperties(GreeterProperties.class)
public class GreeterAutoConfiguration {

    @Autowired
    private GreeterProperties greeterProperties;

    @Bean
    @ConditionalOnMissingBean
    public GreetingConfig greeterConfig() {

        String userName = greeterProperties.getUserName() == null
          ? System.getProperty("user.name")
          : greeterProperties.getUserName();

       //..

        GreetingConfig greetingConfig = new GreetingConfig();
        greetingConfig.put(USER__NAME, userName);
       //...
        return greetingConfig;
    }

    @Bean
    @ConditionalOnMissingBean
    public Greeter greeter(GreetingConfig greetingConfig) {
        return new Greeter(greetingConfig);
    }
}

また、

src/main/resources/META-INF

ディレクトリに次の内容の

spring.factories

ファイルを追加する必要があります。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.baeldung.greeter.autoconfigure.GreeterAutoConfiguration

アプリケーションの起動時に、クラス

Greeter

がクラスパスに存在する場合、

GreeterAutoConfiguration

クラスが実行されます。正常に実行されると、

GreeterProperties

クラスを介してプロパティーを読み取ることによって、Springアプリケーションのコンテキストに

GreeterConfig

および

Greeter

Beanが取り込まれます。



@ConditionalOnMissingBean


アノテーションは、これらのBeanが次の場合にのみ作成されることを保証します。それらはまだ存在しません。これにより、開発者は

@ Configuration

クラスの1つに独自のBeanを定義することで、自動設定されたBeanを完全にオーバーライドできます。


3.2.

pom.xml


を作成する

それでは自動設定モジュールとgreeterライブラリへの依存関係を取り込むスターター

pom

を作成しましょう。

命名規則に従って、コアのSpring Bootチームによって管理されていないすべてのスターターは、ライブラリ名の後に接尾辞

-spring-boot-starter

を付けて開始する必要があります。そのため、スターターを__greeter-spring-boot-starterと呼びます。

<project ...>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.baeldung</groupId>
    <artifactId>greeter-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <greeter.version>0.0.1-SNAPSHOT</greeter.version>
        <spring-boot.version>1.5.2.RELEASE</spring-boot.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>

        <dependency>
            <groupId>com.baeldung</groupId>
            <artifactId>greeter-spring-boot-autoconfigure</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>com.baeldung</groupId>
            <artifactId>greeter</artifactId>
            <version>${greeter.version}</version>
        </dependency>

    </dependencies>

</project>


3.3. スターターを使う

スターターを使用する

greeter-spring-boot-sample-app

を作成しましょう。

pom.xml

では、それを依存関係として追加する必要があります。

<dependency>
    <groupId>com.baeldung</groupId>
    <artifactId>greeter-spring-boot-starter</artifactId>
    <version>${greeter-starter.version}</version>
</dependency>

Spring Bootは自動的にすべての設定を行いますので、Greeter Beanを注入して使用する準備が整います。


application.properties

ファイルで

baeldung.greeter

という接頭辞を付けて定義することで、

GreeterProperties

のデフォルト値を変更することもできます。

baeldung.greeter.userName=Baeldung
baeldung.greeter.afternoonMessage=Woha\ Afternoon

最後に、アプリケーションで

Greeter

Beanを使用しましょう。

@SpringBootApplication
public class GreeterSampleApplication implements CommandLineRunner {

    @Autowired
    private Greeter greeter;

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

    @Override
    public void run(String... args) throws Exception {
        String message = greeter.greet();
        System.out.println(message);
    }
}


4結論

このクイックチュートリアルでは、カスタムのSpring Bootスターターをロールアウトすることと、これらのスターターが自動設定メカニズムと一緒にバックグラウンドでどのように機能するかに焦点を当てて、多くの手動設定を排除しました。

この記事で作成したすべてのモジュールの完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-boot-custom-starter/[GitHubに掲載]で見つけることができます。