【问题标题】:Spring Boot App deployed to Weblogic 12c and failed to StartSpring Boot App 部署到 Weblogic 12c 并且无法启动
【发布时间】:2018-03-09 23:22:54
【问题描述】:

我尝试创建一个 Spring Boot 可部署的 War 文件,然后将其部署到 weblogic 12c。应用程序启动失败,出现异常:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
ERROR SpringApplication - Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphQLServletRegistrationBean' defined in class path resource
...

嵌套异常是:

java.lang.IllegalStateException: No *.graphqls files found on classpath.  Please add a graphql schema to the classpath or add a SchemaParser bean to your application context.

其实上面提到的文件*.graphqls存在于war的WEB-INF/classes/文件夹下。如果将war文件解压到本地磁盘并以分解格式重新部署应用程序,我们将不会看到此异常。

我有什么想念的吗?

谢谢。

【问题讨论】:

  • spring boot 旨在独立运行,而不是在应用服务器内部
  • 您是否按照指南在 weblogic 上部署 spring-boot 应用程序?您将需要一些额外的配置文件。
  • @jmhostalet 你的说法不正确。 Spring Boot 应用程序也可以部署在 App Server 中,过去 2 年我们一直在 JBoss 中部署 Spring Boot 应用程序。 docs.spring.io/spring-boot/docs/current/reference/html/…
  • 其实我可以将这个war文件部署到TOMCAT并运行它没有问题。这是加载资源文件的代码: Resource[] resources = applicationContext.getResources("classpath*:**/*.graphqls"); if(resources.length

标签: java spring spring-boot


【解决方案1】:

如果不查看您的代码或不知道您的 spring-boot 版本,就很难真正诊断出您的问题。为了让我的 spring-boot 应用程序在 WebLogic 上运行,这里和那里必须进行一些小的更改。像在这里和那里包含 weblogic.xml 和一些依赖项的想法

主要是将implements WebApplicationInitializer 添加到我的应用程序类中。

@SpringBootApplication
public class Application extends SpringBootServletInitializer
    implements
    WebApplicationInitializer {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

似乎其他一些问题与您的问题相似,也许这些可以帮助您。似乎您可能在将 spring-boot 与其他 spring(但不是 spring-boot)依赖项一起使用时遇到问题。由于我不知道您的 pom 文件或应用程序类文件是什么样的,因此无法真正分辨。

One

Two

Three

Four

【讨论】:

  • 您好,我正在尝试在 weblogic 服务器中部署和运行这个演示应用程序。源码可以在:github.com/spring-petclinic/spring-petclinic-graphql/tree/… 按照你的建议,我也对应用做了一些改动: 1.修改主应用为:@SpringBootApplication public class PetClinicApplication extends SpringBootServletInitializer implements WebApplicationInitializer 2.添加weblogic.xml来移除依赖冲突 true
【解决方案2】:

我已经找到了这个问题的原因。部署war文件时在weblogic中有点奇怪。它创建一个内部 _wl_cls_gen.jar 文件来打包 /WEB-INF/classes 文件夹的所有文件。

但应用程序仍会在 /j2ee/wl12/cp_domain/servers/cp_msp01/tmp/_WL_user/cpapps-graphql-results/g4qyhf/war/WEB-INF/classes/**/* 等匹配目录中查找资源。 graphqls 并找不到任何匹配项。

【讨论】:

    【解决方案3】:

    我在这个漏洞中浪费了 8 个小时,拼凑从其他面临相同问题的人那里得到的各种线索。

    **唯一的解决方案是将您的应用程序部署为 Weblogic 中的爆炸 WAR。 我假设您已经准备好部署在 Weblogic 上的 Spring Boot 应用程序,关于这个主题有几个技巧,但它们可以在 Internet 上找到(不包括嵌入式 tomcat 并在 POM.XML 中指定 WAR 打包,使用 weblogic 创建 webapp/WEB-INF 文件夹.xml 和 servlet xml)。

    现在在服务器上创建一个文件夹,例如 /home/oracle/wars/myapp,然后将解压后的 WAR 内容复制到该文件夹​​。

    然后转到部署 - 安装,导航到 /home/oracle/wars/ 并从单选按钮列表中选择 myapp 文件夹,然后按照默认步骤进行部署。

    注意,您需要一个普通的 web.xml 文件和 weblogic.xml,否则 Weblogic 不会将其视为“Web 应用程序”**

    部署为展开的 WAR 是一种避免创建 _wl_cls_gen.jar 的解决方法,它是问题的根源。

    最后,对于这个特定的错误,部署到 weblogic 时找不到 **/*.graphqls 文件,以下都不起作用,我提一下,这样你也不会浪费时间:

    1. 在 POM 中添加资源标签

      源/主/资源 **/*。特性 **/*.graphqls
    2. 在 application.properties 中添加 graphql.tools.schema-location-pattern=**/*.graphqls

    3. 在 application.properties 中添加 graphql.servlet.exception-handlers-enabled=true

    4. GraphQL 库的较新版本,我试过了,但从 graphql 7.0.1 开始,一切都失败了,出现此错误

    5. 在 POM 中添加 spring-boot-starter-parent

    【讨论】:

      猜你喜欢
      • 2019-01-28
      • 1970-01-01
      • 2017-12-23
      • 2019-03-09
      • 1970-01-01
      • 2018-12-08
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多