2016-01-21 119 views

回答

3

而不是使用自定義條件,您可以使用僅在使用嵌入容器時啓用的Spring配置文件。當您將Spring Boot應用程序部署到Tomcat時,其主要方法不會運行,使其成爲啓用只希望在嵌入式案例中處於活動狀態的配置文件的好地方。

事情是這樣的:

@SpringBootApplication 
public class So34924050Application extends SpringBootServletInitializer { 

    @Bean 
    @Profile("embedded") 
    public EmbeddedOnlyBean embeddedOnlyBean() { 
     return new EmbeddedOnlyBean(); 
    } 

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

    public static void main(String[] args) { 
     new SpringApplicationBuilder(So34924050Application.class).profiles("embedded").run(args); 
    } 
} 
0

我用@ConditionalOnClass註釋,如果存在嵌入式的Tomcat類只創建TomcatFactory。如果這不符合您的目的,您可以使用多個@CondtionalOn...類來有條件地創建一個bean。例如@CondtionalOnProperty

// If running tomcat embedded, ensure that JNDI is enabled. 
@Bean 
@ConditionalOnClass(name = { 
     "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory", 
     "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer", 
     "org.apache.catalina.startup.Tomcat" 
}) 
public TomcatEmbeddedServletContainerFactory tomcatFactory() { 
    return new TomcatEmbeddedServletContainerFactory() { 
     @Override 
     protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(final Tomcat tomcat) { 
      tomcat.enableNaming(); 
      return super.getTomcatEmbeddedServletContainer(tomcat); 
     } 
    }; 
} 
+0

此代碼不能正常工作,它仍然呼籲嵌入式Tomcat和獨立的Tomcat太.... – b0c1