2016-01-21 141 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