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