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来移除依赖冲突我已经找到了这个问题的原因。部署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) 类加载器?