我尝试创建一个spring boot deployable 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
存在于WEB-INF/classes/
文件夹下的战争中。如果将war文件解压缩到本地磁盘并以展开格式重新部署应用程序,我们将无法看到此异常。
我会错过什么吗?
感谢。
答案 0 :(得分:1)
我在这个漏洞上浪费了 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
答案 1 :(得分:0)
如果没有看到您的代码或了解您的弹簧启动版本,那么很难真正诊断您的问题。这里和那里有一些小的变化,必须让我的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文件或应用程序类文件是什么样子,所以无法真正说出来。
答案 2 :(得分:0)
我已经找出了这个问题的原因。在部署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并找不到匹配的东西。