Spring Boot App 部署到 Weblogic 12c 并且无法启动

Posted

技术标签:

【中文标题】Spring Boot App 部署到 Weblogic 12c 并且无法启动【英文标题】:Spring Boot App deployed to Weblogic 12c and failed to Start 【发布时间】: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 【参考方案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 文件,以下都不起作用,我提一下,这样你也不会浪费时间:

    在 POM 中添加资源标签

    源/主/资源 **/*。特性 **/*.graphqls

    在 application.properties 中添加 graphql.tools.schema-location-pattern=**/*.graphqls

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

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

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

【讨论】:

以上是关于Spring Boot App 部署到 Weblogic 12c 并且无法启动的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 Spring Boot 应用程序部署到 App Engine 并连接到数据库?

Spring Boot 应用在部署到 Google App Engine 时无法连接到 Google Cloud SQL (PostgreSQL)

Spring Boot GCP:将 PubSub 应用程序部署到 App Engine 标准环境时出现“Google 凭据”异常

Spring Boot 应用 WAR 部署到 Resin 4:有没有办法先使用 app (WEB-INF/lib) 类加载器?

将 java spring-boot app *.jar 与根文件夹中的其他文件一起部署到 heroku

将 Spring Boot 部署到 Tomcat