Spring Bootでカスタムスターターを作成する
1概要
コアリンク:/spring-boot-start[Spring Boot]開発者は、一般的なオープンソースプロジェクトのほとんどに
スターター
を提供していますが、これらに限定されません。
-
独自のカスタムスターターを作成することもできます** 。組織内で使用するための内部ライブラリがある場合は、Spring Bootのコンテキストで使用する予定がある場合は、そのためのスターターも作成することをお勧めします。
これらのスターターにより、開発者は長い設定を避けて開発をすぐに始めることができます。しかし、バックグラウンドで多くのことが行われているため、アノテーションによって
pom.xml
に依存関係を追加するだけで非常に多くの機能が有効になる方法を理解するのが困難になることがあります。
この記事では、舞台裏で何が起こっているのかを見るために、Spring Bootのマジックについて説明します。それから、これらの概念を使用して、独自のカスタムライブラリのスターターを作成します。
2 Spring Bootの自動設定をわかりやすく説明する
2.1. 自動設定クラス
Spring Bootは起動時に、クラスパスで
spring.factories
という名前のファイルを探します。このファイルは
META-INF
ディレクトリにあります。
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/springのスニペットを見てみましょう。
.factories[spring-boot-autoconfigureからのファイル]プロジェクト:
# 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の概念に基づいて、カスタムスターターを作成するには、次のコンポーネントを書く必要があります。
-
私達のライブラリのための自動設定クラスとプロパティクラス
カスタム設定用
-
ライブラリとライブラリの依存関係を取り込むための初心者
自動設定プロジェクト
デモンストレーションのために、私たちは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に掲載]で見つけることができます。