当前位置: 首页 > 知识库问答 >
问题:

Spring启动RESTful服务作为WAR而不是JAR

竺绍辉
2023-03-14

我正在使用Spring Boot创建JavaREST应用程序。我已经成功地加载了这个示例,并尝试将JAR文件转换为Spring Boot站点上显示的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注释之外,我还有其他注释。去掉这些,现在Tomcat日志显示了这个错误。

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

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

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

java.lang.ClassNotFoundExcema:org.glassfish.jersey.process.internal.请求ExecutorFactory

谷歌搜索说我应该添加球衣通用和球衣核心罐子,我做了,但它没有解决问题。由于某种原因,似乎没有在jersey-common-2.19.jar中打包ResestExecutorFactory.class。

共有1个答案

都乐逸
2023-03-14

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

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

然后把主要方法放回去。

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

编辑:

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

Jersey正在加载Spring应用程序上下文。请参阅这行日志:SpringWebApplicationInitializers在类路径[com.jersey]上检测到。Application@148ac084,org。玻璃鱼。运动衫服务器SpringSpringWebApplicationInitializer@7807c6d3]

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

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

或者您必须排除组织。玻璃鱼。运动衫服务器SpringSpringWebApplicationInitializer初始化器

 类似资料:
  • 我希望payara服务器作为服务运行。我以sudo的身份登录asadmin,并使用create-service命令。给出了以下输出。 这将在 /etc/init.d/ 文件夹中创建payara_production脚本,但一旦重新启动计算机,就不会执行此脚本。我必须手动启动payara才能运行它。 “您已经创建了服务,但是您需要自己启动它”是什么意思,我在之前使用的GlassFish版本中没有类似

  • 我正在尝试在亚马逊 Linux EC2 实例上启动Spring启动应用程序即服务。 我将服务打包为: 当我手动启动服务(没有服务)时,它会运行correclty: 信息 [main] 组织.springframework.boot.web.embedded.tomcatWebServer: Tomcat 在端口上启动: 8080 (http) 与上下文路径 '' 信息 [主] 组织.springf

  • 我正在使用spring boot版本1.3.5(spring 4.2.6)开发一个应用程序。我使用log4j2版本2.4.1作为日志系统。当在sts(spring tool suite)上工作并在Embeded tomcat上执行时,日志可以正常工作(在控制台和文件上),但是当构建一个war文件并将其部署到外部Tomcat8上时,虽然创建了日志文件,但我的日志并没有出现在其中。 null 但这些解

  • 链接到问题:https://github.com/jenca-cloud/docker-bimserver/issues/1 指向DockerFile的链接:https://hub.docker.com/r/connoralexander/docker-bimserver/ 大家好,我有一个问题是Tomcat8没有启动服务。正在使用设置的用户名和密码成功安装Tomcat 8.0.30。它成功地wg

  • 我已将spring-boot应用程序部署到IIS/嵌入式tomcat,作为一个azure应用程序服务。当应用程序服务启动时,应用程序日志显示同一实例大约每10分钟发生一次重新启动(新的pid)。90分钟后,它将最终成功部署。我从嵌入的tomcat日志和org.springframework日志中看不到任何问题,但有时它可能在2分钟内开始。 我还可以在哪里查找启动错误,有没有办法增加应用服务启动时间