我正在使用Spring-boot创建Java REST应用程序。我已经成功加载了example here,我试图将JAR文件转换为Spring文件中提供的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日志也没有显示任何错误。
所以我不确定这可能是什么问题。如果您有任何想法,请分享。谢谢!
最初它没有工作,因为除了SpringBootApplication注释到Application类之外,我还有其他注释。拿出那些,现在Tomcat日志显示此错误。
SEVERE:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例的异常 java.lang.IllegalStateException:无法初始化上下文,因为已存在根应用程序上下文 - 检查web.xml中是否有多个ContextLoader *定义!
我不确定其他的ContextLoader是什么。
好的,在将jar更新到最新版本后,使用注释@SpringBootApplication for Application.java类,应用程序启动但是当我调用我收到的其中一个服务时:
java.lang.ClassNotFoundException:org.glassfish.jersey.process.internal.RequestExecutorFactory
谷歌搜索说我应该添加球衣 - 普通球衣和球衣核心罐子,我做了,但它没有解决它。由于某种原因,看起来RequestExecutorFactory.class没有打包在jersey-common-2.19.jar中。
答案 0 :(得分:1)
为什么0.6
班here中有这么多注释?
Application
应足以启用自动配置。
尝试删除其他人。
并放回主要方法。
我认为你混合了两个配置tw创建一个war:pre 3.0和post 3.0 servlet容器(根据Spring Boot documentation)
编辑:
我发现此question与您的问题有关。
Jersey正在加载一个Spring ApplicationContext。请参阅以下日志行:@SpringBootApplication
您是否可以更新Spring Boot版本?
至少1.20,这样您就可以使用Spring WebApplicationInitializers detected on classpath: [com.jersey.Application@148ac084, org.glassfish.jersey.server.spring.SpringWebApplicationInitializer@7807c6d3]
。将Spring和Jersey集成起来会容易得多。
您可以找到一个示例here(Spring Boot官方示例)。
或者您必须排除spring-boot-starter-jersey
初始值设定项