Java 在CloudFoundry WAR部署中排除某些WebApplicationInitializer

Java 在CloudFoundry WAR部署中排除某些WebApplicationInitializer,java,spring,spring-boot,cloud-foundry,Java,Spring,Spring Boot,Cloud Foundry,这个问题有一个具体的版本和一个一般的版本;我会双向问的 具体问题 我们有一个传统的SpringWeb应用程序,它与ApacheCamel集成,我们正在将其推向CloudFoundry。它依赖于一个定制库,该库引入了springcloudsecurity(因此,springboot autoconfigure,等等)。当部署到Cloud Foundry时,Java自动配置会在类路径上查找WebApplicationInitializers,找到的是Jersey自动配置。当它调用特定的WebAppl

这个问题有一个具体的版本和一个一般的版本;我会双向问的

具体问题

我们有一个传统的SpringWeb应用程序,它与ApacheCamel集成,我们正在将其推向CloudFoundry。它依赖于一个定制库,该库引入了
springcloudsecurity
(因此,
springboot autoconfigure
,等等)。当部署到Cloud Foundry时,Java自动配置会在类路径上查找
WebApplicationInitializer
s,找到的是
Jersey自动配置
。当它调用特定的
WebApplicationInitializer
时,我们会得到注释解析错误。有没有办法排除这一点
@EnableAutoConfiguration(exclude=…)
不起作用,因为在自动配置步骤中没有发生这种情况

一般问题


有没有办法,通过
web.xml
或其他工具,告诉Java Autoreconfigure代码(通过Java buildpack包含)跳过执行某些
WebApplicationInitializer
s?

如果您将应用程序部署为可执行文件而不是WAR,则不会扫描
WebApplicationInitializers
(这是Spring产品,而不是buildpack产品).

一个有趣的问题。你能发布你推到CF时得到的堆栈跟踪/错误日志吗?这可能有助于准确了解发生了什么问题。我想这是由Jersey不在类路径上引起的类加载器问题。这确实是Spring Boot中的一个bug,所以你应该在github中报告并修复它(但我的答案仍然有效)。我也怀疑这是真的。我会看看我是否能让代码回到某个点来重现它(我已经重构了几天,但我有一个很好的保存点)。我肯定会这样做,这样我就可以在Github中打开问题。因此,您建议在
SpringApplication.run()中添加
main
方法
…这能与非DispatcherServlet的主servlet一起工作吗??他们将
CamelHttpTransportServlet
ContextLoaderListener
结合使用(假设您使用的是Spring Boot)我将对此进行研究。这是否也可以通过
SpringBootServletInitializer
实现?出于其他技术考虑,我们正在尽量避免使用嵌入式servlet容器。如果您对嵌入式容器有顾虑,我希望您能说出它们是什么(在github中)。无论如何,war部署应该是相同的。请至少对github问题发表评论。