Spring boot 和 apache spark - 容器冲突

Spring boot and apache spark - container conflict

我正在尝试在项目中同时使用 spring boot 1.1.5 和 apache spark 1.0.2。看起来 apache spark 在内部使用 Jetty 容器,我已经配置 spring-boot 使用 Tomcat 容器。但是,应用程序启动失败,根本原因是某些 securityException。如果我看到完整的堆栈跟踪看起来像 spring 引导尝试初始化 "jettyEmbeddedServletContainerFactory" ,它不应该放在首位。由于通过 spark 存在码头,它可能会从类路径中获取它。如果我再次从 spark 和 运行 中排除码头,我不会再看到相同的错误,但是由于找不到码头,SparkContext 初始化失败。我如何告诉 spring-boot 运行 时间寻找 "TomcatEmbeddedServletContainerFactory" 而不是 jetty one?

@Joakim Erdfelt,谢谢。
我只是在等着看是否有人熟悉这种情况,以及这是否只是一个小的配置更改。事实证明是这样的!

@配置
@EnableAutoConfiguration(排除={EmbeddedServletContainerFactory.class})
public class 我的配置 { }


我将自己的 "EmbeddedServletContainerFactory" bean 定义为 "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContaine‌​rFactory",它开始按我的预期工作。

我得到 "java.lang.SecurityException: class "javax.servlet.http.HttpSessionIdListener" 的签名者信息与同一包中其他 类 的签名者信息不匹配"

要解决此问题,我需要删除所有 javax.servlet 依赖项。

<dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.10</artifactId>
        <version>1.3.1</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.glassfish</groupId>
                <artifactId>javax.servlet</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse.jetty.orbit</groupId>
                <artifactId>javax.servlet</artifactId>
            </exclusion>
        </exclusions>
    </dependency>