Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法启动spring启动应用程序_Spring_Spring Boot - Fatal编程技术网

无法启动spring启动应用程序

无法启动spring启动应用程序,spring,spring-boot,Spring,Spring Boot,我无法使用@SpringBootApplication启动我的应用程序 @SpringBootApplication public class AppInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return appli

我无法使用@SpringBootApplication启动我的应用程序

@SpringBootApplication
public class AppInitializer extends SpringBootServletInitializer {

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

    public static void main(String[] args) {
            ConfigurableApplicationContext ctx = new AppInitializer().configure(new SpringApplicationBuilder(AppInitializer.class)).run(args);
            System.out.println("count="+ctx.getBeanDefinitionCount());
        }
}
pom.xml使用:

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>compile</scope>
    </dependency> 

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
<exclusions>
        <exclusion>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

发现问题:依赖性jersey容器servlet核心仅适用于小于servlet 3.0规范的servlet容器。由于您使用实现Servlet3.0的Tomcat7,因此必须使用jersey容器Servlet。请参见此处的泽西岛文档:

如果您将应用程序作为独立应用程序运行(即,不将其部署到Tomcat中),则必须确保依赖项spring boot starter Tomcat位于范围“compile”中。目前,依赖项的作用域为“provided”,这意味着运行应用程序时依赖项不在类路径上

@SpringBootApplication
public class AppInitializer extends SpringBootServletInitializer {

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

    public static void main(String[] args) {
            ConfigurableApplicationContext ctx = new AppInitializer().configure(new SpringApplicationBuilder(AppInitializer.class)).run(args);
            System.out.println("count="+ctx.getBeanDefinitionCount());
        }
}

如果您想在Tomcat和独立应用程序中运行您的应用程序,您必须使用Maven配置文件并构建两个WAR,一个是提供的spring boot starter Tomcat,另一个是编译的spring boot starter Tomcat。

这是您的整个pom.xml吗?请发布所有依赖项。servlet api jar中似乎存在版本冲突。添加了依赖关系树以供参考。有jersey容器servlet核心和jersey容器servlet jar。我在pom中为jersey容器servlet核心添加了排除。它现在抛出不同的错误:java.util.concurrent.ExecutionException:java.lang.NoSuchMethodError:javax.servlet.ServletContext.getContextPath()Ljava/lang/String;在java.util.concurrent.FutureTask.report(FutureTask.java:122)中,主要原因是相同的,仍然存在冲突的API版本。你使用IDE吗?如果是这样的话,您可以搜索ServletContext类,看看这个类出现了多少次,在哪些JAR中?Tomcat jar应该只有一次出现。我使用的是GGTS IDE,它没有显示ServletContext的任何出现:-(.好的,那么我没有更多的想法:(我尝试了不同的IDE来检查出现的情况。ServletContext仅来自Tomcat-embed-core-7.0.57.jar。