2017-07-04 20 views
0

spring-bootアプリケーションがembedded tomcatまたはstandalone tomcat serverで実行されているかどうかを検出できますか?埋め込みまたはスタンドアロンのアプリケーションサーバーを検出するにはどうすればよいですか?

スタンドアロンサーバーでのみ実行する@Configurationを作成します。 しかし、私はこのためには@Profileを使いたくありません。すべてのプロファイルは、開発中に埋め込みのtomcatの中で実行可能でなければならないからです。

次は、これまで動作しません:

@Configuration 
@AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class) 
@ConditionalOnMissingBean(EmbeddedServletContainerFactory.class) 
@ConditionalOnMissingBean(TomcatEmbeddedServletContainerFactory.class) 
public class TomcatConfig { 
     @ConditionalOnMissingBean(EmbeddedServletContainerFactory.class) 
     @ConditionalOnMissingBean(TomcatEmbeddedServletContainerFactory.class) 
     @Bean 
     public MyBean init() { 
        //this should not execute in embedded tomcat 
     } 
} 

@Configuration 
public class MainConfig extends SpringBootServletInitializer { 
    public static void main(String[] args) { 
     SpringApplication.run(MainConfig.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(MainConfig.class); 
    } 

} 

答えて

1

未テストをしていますが、おそらくうれしいです@ConditionalOnMissingBean(TomcatEmbeddedServletContainerFactory.class)

+0

ああを確認することができます! – membersound

+0

実際に私はTomcatEmbeddedServletContainerFactory'に対する私の答えをTomcat固有のものに変更しました。私は両方を試してみてください。 @membersound – Strelok

+0

スタンドアロンのTomcat内でのみ設定を実行したいので、クラスレベルと '@ Bean'レベルの両方で' @ConditionalOnMissingBean(TomcatEmbeddedServletContainerFactory.class) 'を使ってみました。しかし、Beanはまだ組み込み開発環境で実行されて作成されています。 Tomcatの自動設定後に設定を遅らせることは可能でしょうか?しかし、私は 'TomcatEmbeddedServletContainerFactory'を設定する春のリポジトリでクラスを見つけることができませんでした... – membersound

関連する問題