@Configuration
ファイルに設定されている@Profile
に応じて、いくつかのapplication.properties
クラスの1つを使用するSpring Bootアプリケーションを作成しています。
これらの構成クラスの1つはRESTインターフェイスを使用するため、依存関係としてspring-boot-starter-web
を含めています。
これにより、組み込みTomcatインスタンスが起動しますが、これで問題ありません。
問題は、他のプロファイルに組み込みサーバーが必要ないことです(たとえば、RESTの代わりにJMSを使用して着信メッセージを処理しています)。
@SpringBootApplication
がデフォルトでTomcatを起動するのを停止し、REST構成クラスにのみ使用する方法はありますか?たとえば、そのクラスに@EnableWebMVC
アノテーションを付ける
これが私の@Configuration
classesの例です:
残り:
@Profile({"REST"})
@Configuration
@EnableWebMvc
public class HttpConfiguration{
.
.
.
}
JMS:
@Profile({"JMS"})
@Configuration
@EnableJms
public class JMSConfiguration{
.
.
.
}
ありがとう
つかいます
@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class,
WebMvcAutoConfiguration.class})
spring Bootの組み込みサーブレットコンテナの自動構成を除外します。さらに、REST以外の場合には次のプロパティを設定する必要があります。これにより、Spring BootはWebApplicationContext
(サーブレットコンテナが必要)を開始しようとしません。
spring.main.web-environment=false
次に、EmbeddedServletContainerAutoConfiguration.class
をインポートして、RESTプロファイルの埋め込みTomcatを有効にします(これにより、RESTプロファイルがロードされるまで、自動構成が遅延します。
@Profile({"REST"})
@Configuration
@Import(EmbeddedServletContainerAutoConfiguration.class)
public class HttpConfiguration {
// ...
}
EmbeddedServletContainerCustomizer
sを使用している場合は、EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class
もインポートする必要があります。
@hzpzと@oridからの回答は、私を正しい方向に導きました。
追加する必要がありました
@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class,
WebMvcAutoConfiguration.class})
そして設定:
spring.main.web-environment=false
私のapplication.properties
休息以外の場合のファイル。
Spring Boot 2.0のみspring.main.web-application-type=none
関連するプロファイルでトリックを行います。
複数のドキュメントを使用する場合application.yml
Spring Boot 2.0で、このブロックを追加してno-web-profile-name
組み込みWebサーバーを持たないプロファイルで機能するはずです:
---
spring:
profiles: no-web-profile-name
main:
web-application-type: none