我们正在尝试在Google AppEngine中部署基于Spring Cloud(Boot + Netflix API包装器)的项目。我们希望使用spring-cloud-starter-zuul作为API网关。
由于开发团队之外的原因,我们必须在AppEngine标准环境(Java7,Servlet 2.5)中部署它。我们无法使用较新的AppEngine Flexible Environment(基于容器,Java 8)。
我们已根据这些guidelines创建了一个示例Gradle + AppEngine项目。
示例项目代码位于Github。
我们在运行命令 ./ gradlew appengineRun 时看到此堆栈跟踪:
java.lang.ClassNotFoundException: com.google.appengine.api.ThreadManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_80]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_80]
at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_80]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_80]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[na:1.7.0_80]
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:198) ~[appengine-local-runtime.jar:na]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[na:1.7.0_80]
at java.lang.Class.forName0(Native Method) ~[na:1.7.0_80]
at java.lang.Class.forName(Class.java:195) ~[na:1.7.0_80]
at com.netflix.hystrix.util.PlatformSpecific.getAppEngineThreadFactory(PlatformSpecific.java:64) ~[hystrix-core-1.5.5.jar:1.5.5]
at com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller.<init>(HystrixMetricsPoller.java:86) ~[hystrix-metrics-event-stream-1.5.5.jar:1.5.5]
at org.springframework.cloud.netflix.hystrix.HystrixCircuitBreakerConfiguration$HystrixMetricsPollerConfiguration.start(HystrixCircuitBreakerConfiguration.java:135) ~[spring-cloud-netflix-core-1.2.0.RELEASE.jar:1.2.0.RELEASE]
在应用程序启动期间,我们错过了什么错误?
这是否与Hystrix代码有关,试图确定它是否在AppEngine环境中运行?参考:Netflix Hystrix Pull Request 1066(由于SO上的声望点很少,我不能发布超过两个链接)。
谢谢。