最近升级了SpringBoot 3.3,试了下graalvm,好像apollo这边还不支持graalvm
打包成二进制文件是成功了的,运行时报了下面的错误
Exception in thread "main" java.lang.IllegalArgumentException: Unable to instantiate factory class [com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer] for factory type [org.springframework.context.ApplicationContextInitializer]
at org.springframework.core.io.support.SpringFactoriesLoader$FailureHandler.lambda$throwing$0(SpringFactoriesLoader.java:647)
at org.springframework.core.io.support.SpringFactoriesLoader$FailureHandler.lambda$handleMessage$3(SpringFactoriesLoader.java:671)
at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:231)
at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:206)
at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:160)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:483)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:479)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:295)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:274)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
at com.aijiao.app.evaluation.Application.main(Application.java:12)
at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: java.lang.reflect.InvocationTargetException
at [email protected]/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at [email protected]/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.instantiate(SpringFactoriesLoader.java:382)
at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:228)
... 10 more
Caused by: com.ctrip.framework.apollo.exceptions.ApolloConfigException: Unable to load instance for com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory!
at com.ctrip.framework.apollo.spring.util.SpringInjector.getInstance(SpringInjector.java:57)
at com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer.<init>(ApolloApplicationContextInitializer.java:99)
... 14 more
Caused by: com.ctrip.framework.apollo.exceptions.ApolloConfigException: Unable to initialize Apollo Spring Injector!
at com.ctrip.framework.apollo.spring.util.SpringInjector.getInjector(SpringInjector.java:40)
at com.ctrip.framework.apollo.spring.util.SpringInjector.getInstance(SpringInjector.java:53)
... 15 more
Caused by: java.lang.AssertionError: java.lang.NoSuchMethodException: java.lang.Long.parseLong(java.lang.String)
at com.google.inject.internal.TypeConverterBindingProcessor.convertToPrimitiveType(TypeConverterBindingProcessor.java:145)
at com.google.inject.internal.TypeConverterBindingProcessor.prepareBuiltInConverters(TypeConverterBindingProcessor.java:46)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:182)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
at com.google.inject.Guice.createInjector(Guice.java:87)
at com.google.inject.Guice.createInjector(Guice.java:69)
at com.google.inject.Guice.createInjector(Guice.java:59)
at com.ctrip.framework.apollo.spring.util.SpringInjector.getInjector(SpringInjector.java:38)
... 16 more
Caused by: java.lang.NoSuchMethodException: java.lang.Long.parseLong(java.lang.String)
at [email protected]/java.lang.Class.checkMethod(DynamicHub.java:1078)
at [email protected]/java.lang.Class.getMethod(DynamicHub.java:1063)
at com.google.inject.internal.TypeConverterBindingProcessor.convertToPrimitiveType(TypeConverterBindingProcessor.java:122)
... 23 more
这个报错看上去是 graalvm 自己的问题?
Caused by: java.lang.NoSuchMethodException: java.lang.Long.parseLong(java.lang.String) at [email protected]/java.lang.Class.checkMethod(DynamicHub.java:1078) at [email protected]/java.lang.Class.getMethod(DynamicHub.java:1063) at com.google.inject.internal.TypeConverterBindingProcessor.convertToPrimitiveType(TypeConverterBindingProcessor.java:122) ... 23 more
编译的时候没报这个错,但是运行的时候报错了 我不是很懂graalvm。。貌似graalvm是不允许运行时进行反射了,报错的这个地方应该就是一个反射? apollo有做过这方面的尝试吗(支持graalvm)?
和反射有一定关系,graalvm 在编译的时候可能少加载了一些类库,记得应该是可以手动配置增加一些加载项的。 apollo 本身没有特意做 graalvm 的支持,可以试试在 spring boot 3 下跑,不过总体还不是很成熟。
已经是在SpringBoot3的环境下跑了 SpringBoot:3.3.4 Apollo: 2.3.0
上面这个错误看起来是出现在guice里,我记得以前有看到issues说,考虑摘除掉guice的依赖
This issue has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in 7 days unless it is tagged "help wanted" or other activity occurs. Thank you for your contributions.
遇到了类似问题