[英]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。
好的,将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.