繁体   English   中英

Spring Boot RESTful服务作为WAR而不是JAR

[英]Spring boot RESTful service as WAR not JAR

我正在使用Spring-boot创建Java REST应用程序。 我已经在这里成功加载了示例,并且尝试将Spring引导站点上显示的JAR文件转换为WAR文件。 我已经修改了pom.xml文件,并添加了:

<!-- other pom.xml conf -->
<packaging>war</packaging>

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

然后,我修改了Application.java类以初始化Servlet(这是Spring-boot用于替换web.xml文件的内容):

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);
}

}

我生成了.WAR文件,但是当我将其部署到Tomcat时,服务将返回404。Tomcat日志也未显示任何错误。

因此,我不确定这可能是什么问题。 如果您有任何想法,请分享。 谢谢!


更新:

最初它不起作用,因为除了Application类的SpringBootApplication注释外,我还具有其他注释。 拿走那些,现在Tomcat日志显示此错误。

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

我不确定还有其他的ContextLoader。


UpdateToUpdate:

好的,将jar更新到最新版本后,使用@SpringBootApplication for Application.java类注解,应用程序启动,但是当我调用收到的服务之一时:

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

一个谷歌搜索说,我应该添加球衣通用罐和球衣核心罐,但是并没有解决它。 出于某些原因,RequestExecutorFactory.class似乎未包装在jersey-common-2.19.jar中。

为什么在这里Application类中有这么多注释?

@SpringBootApplication应该足以启用自动配置。 尝试删除其他人。

并放回主要方法。

我认为您在创建战争时混用了两种配置:3.0之前和3.0之后的servlet容器(根据Spring Boot文档

编辑:

我发现这个问题与您的问题有关。

泽西岛正在加载Spring ApplicationContext。 请参阅以下日志行: Spring WebApplicationInitializers detected on classpath: [com.jersey.Application@148ac084, org.glassfish.jersey.server.spring.SpringWebApplicationInitializer@7807c6d3]

您可以更新Spring Boot版本吗? 至少1.20,这样您就可以使用spring-boot-starter-jersey 整合Spring和Jersey会容易得多。

您可以在这里找到一个示例(Spring Boot官方示例)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM