web-dev-qa-db-ja.com

プロファイルを使用した埋め込みTomcatのスプリングブートの有効化/無効化

@Configurationファイルに設定されている@Profileに応じて、いくつかのapplication.propertiesクラスの1つを使用するSpring Bootアプリケーションを作成しています。

これらの構成クラスの1つはRESTインターフェイスを使用するため、依存関係としてspring-boot-starter-webを含めています。

これにより、組み込みTomcatインスタンスが起動しますが、これで問題ありません。

問題は、他のプロファイルに組み込みサーバーが必要ないことです(たとえば、RESTの代わりにJMSを使用して着信メッセージを処理しています)。

@SpringBootApplicationがデフォルトでTomcatを起動するのを停止し、REST構成クラスにのみ使用する方法はありますか?たとえば、そのクラスに@EnableWebMVCアノテーションを付ける

これが私の@Configurationclassesの例です:

残り:

@Profile({"REST"})
@Configuration
@EnableWebMvc
public class HttpConfiguration{
 .
 .
 .
}

JMS:

@Profile({"JMS"})
@Configuration
@EnableJms
public class JMSConfiguration{
 .
 .
 .
}

ありがとう

21
barcom

つかいます

@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 {
    // ...
}

EmbeddedServletContainerCustomizersを使用している場合は、EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.classもインポートする必要があります。

29
hzpz

@hzpzと@oridからの回答は、私を正しい方向に導きました。

追加する必要がありました

@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 
WebMvcAutoConfiguration.class})

そして設定:

spring.main.web-environment=false

私のapplication.properties休息以外の場合のファイル。

17
barcom

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
13
frno