Java Spring boot RESTful服务作为WAR而不是JAR

Java Spring boot RESTful服务作为WAR而不是JAR,java,maven,spring-mvc,tomcat,spring-boot,Java,Maven,Spring Mvc,Tomcat,Spring Boot,我正在使用SpringBoot创建一个JavaREST应用程序。我已经成功地加载了,并尝试将JAR文件转换为WAR文件,如Spring引导站点所示。我修改了pom.xml文件,添加了: 战争 org.springframework.boot 弹簧启动机tomcat 假如 然后我修改了Application.java类来初始化servlet(这是SpringBoot用来替换web.xml文件的): 我生成了.WAR文件,但当我在Tomcat上部署它时,服务返回404。Tomcat日志也没有显示

我正在使用SpringBoot创建一个JavaREST应用程序。我已经成功地加载了,并尝试将JAR文件转换为WAR文件,如Spring引导站点所示。我修改了pom.xml文件,添加了:


战争
org.springframework.boot
弹簧启动机tomcat
假如
然后我修改了Application.java类来初始化servlet(这是SpringBoot用来替换web.xml文件的):

我生成了.WAR文件,但当我在Tomcat上部署它时,服务返回404。Tomcat日志也没有显示任何错误

所以我不确定这可能是什么问题。如果你有任何想法,请分享。谢谢


更新: 最初它不起作用,因为除了应用程序类的SpringBootApplication注释之外,我还有其他注释。去掉这些,现在Tomcat日志显示了这个错误

严重:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例时发生异常 java.lang.IllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文-检查web.xml中是否有多个ContextLoader*定义

我不确定还有什么其他的ContextLoader


更新更新: 好的,在使用注释@SpringBootApplication for Application.java类将JAR更新到最新版本后,应用程序将启动,但当我调用我收到的其中一个服务时:

java.lang.ClassNotFoundException:org.glassfish.jersey.process.internal.RequestExecutorFactory


谷歌搜索说我应该添加jersey common和jersey core罐子,我添加了,但没有修复。由于某种原因,RequestExecutorFactory.class似乎没有打包在jersey-common-2.19.jar中

为什么在
应用程序
类中有这么多注释

@SpringBootApplication
应足以启用自动配置。 试着去掉其他的

然后把主要方法放回去

我认为您混合了两种配置来创建war:3.0之前和3.0之后的servlet容器(根据)

编辑:

我发现这与你的问题有关

Jersey正在加载Spring应用程序上下文。请参阅这行日志:
SpringWebApplicationInitializers在类路径[com.jersey]上检测到。Application@148ac084,org.glassfish.jersey.server.spring。SpringWebApplicationInitializer@7807c6d3]

您是否可以更新您的Spring Boot版本? 至少为1.20,这样您就可以使用
弹簧启动机球衣了
。将Spring和Jersey结合起来会容易得多

您可以找到一个示例(SpringBoot官方示例)


或者您必须排除初始化程序的
org.glassfish.jersey.server.spring.SpringWebApplicationInitializer

您是否用
@SpringBootApplication
注释了类
应用程序
?是的,我用'@SpringBootApplication'注释了应用程序类,并创建了:public@interface SpringBootApplication{}(我不确定这是否正确。)此注释来自spring boot,您无法创建自己的。在github上发布您的项目-粘贴到此处的文件之外有问题好的,这里是github项目(我删除了为SpringBootApplication创建的接口)首先-您真的需要REST端点的Jersey吗?如果需要,请先看一看-在您的代码中,我感觉您正在使事情变得过于复杂(pom中的依赖项)。SpringBootApplication注释不起作用,我使用的是Springboot的1.1.9版,但该注释不存在,因此其他3个注释应该是等效的。除此之外,我根据该链接添加了main方法,但如果我在外部Tomcat上部署war,则日志中不会出现错误。我已尝试使用以下工具运行war:java-jar myApp.war和我get org.springframework.beans.factory.BeanDefinitionStoreException:未能加载bean类。它找不到WebMVCConfigureAdapter.classI将在github上检查您的项目,看看是否可以解决问题。如果是这样,我将创建一个pull请求。此外,我刚刚创建了一个带有新配置和版本的sion集成Spring Boot和jersey Hey,感谢您的帮助,但是您的pull请求将我带到了项目的确切位置,我得到了以下错误:java.lang.NoClassDefFoundError:org/glassfish/jersey/process/internal/RequestExecutorFactory[…]原因:java.lang.ClassNotFoundException:org.glassfish.jersey.process.internal.RequestExecutorFactory
public class Application extends SpringBootServletInitializer {
//    public static void main(String[] args) {
//        new SpringApplicationBuilder(Application.class).run(args);
//    }

@Bean
public ServletRegistrationBean jerseyServlet() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(), "/*");
      registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyInitialization.class.getName());
    return registration;
}

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

}