最初,我的应用程序运行良好,使用 spring-data-gemfire 1.9.7.RELEASE 。但是,在升级到 spring-data-gemfire 2.0.1.RELEASE 之后,我的应用程序无法启动并抛出初始化错误,如下所示:
C:\ Dev \ projects \ JavaWebClient \ web \ target> java -jar 网络0.0.1-SNAPSHOT.jar
。 ____ _ __ _ _
/ \ / ' __ _ ()_ __ __ _ \ \ \ \
(()_ |' _ |' | |' / `| \ \ \ \
\ / )| | )| | | | | || ( | |))))
' | ____ | | | | | | | __,| / / / /
========= | _ | ============== | ___ / = / / / _ /
:: Spring Boot ::(v1.5.8.RELEASE)[info 2017/11/15 19:07:23.999 EAT tid = 0x1]开始 带有PID 13804的MY-PC上的JavaWebClientApplication v0.0.1-SNAPSHOT (C:\开发\项目\ JavaWebClient \网络\目标\ WEB-0.0.1-SNAPSHOT.jar 由edwards在C:\ Dev \ projects \ JavaWebClient \ web \ target)
启动[info 2017/11/15 19:07:24.019 EAT tid = 0x1]没有活动的个人资料 设置,回退到默认配置文件:默认
[info 2017/11/15 19:07:24.812 EAT tid = 0x1]刷新 org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e6c3152: 启动日期[Wed Nov 15 19:07:24 EAT 2017];背景的根源 层次结构
[错误2017/11/15 19:07:25.892 EAT tid = 0x1]应用程序启动 java.lang.NoSuchMethodError失败: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava /郎/字符串;)Ljava / util的/可选; at org.springframework.data.gemfire.repository.config.GemfireRepositoryConfigurationExtension.registerBeansForRoot(GemfireRepositoryConfigurationExtensi) on.java:120) 在org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:116) 在org.springframework.data.repository.config.RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions(RepositoryBeanDefinitionRegistrarSupport。 的java:83) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda $ loadBeanDefinitionsFromRegistrars $ 0(ConfigurationClassBeanDefini) tionReader.java:360) at java.util.LinkedHashMap.forEach(Unknown Source) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReade) r.java:359) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefiniti onReader.java:144) 在org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:117) 在org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:328) 在org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:233) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.ja) VA:273) 在org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) 在org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:693) 在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 在org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) 在org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:303) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) 在com.nftconsult.gemfire.web.JavaWebClientApplication.main(JavaWebClientApplication.java:173) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 在org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 在org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 在org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
[info 2017/11/15 19:07:25.897 EAT tid = 0x1]结束 org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e6c3152: 启动日期[Wed Nov 15 19:07:24 EAT 2017];背景的根源 层次结构
[警告2017/11/15 19:07:25.901 EAT tid = 0x1]抛出异常 来自LifecycleProcessor的上下文关闭 java.lang.IllegalStateException:LifecycleProcessor未初始化 - 打电话'刷新'在通过上下文调用生命周期方法之前: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e6c3152: 启动日期[Wed Nov 15 19:07:24 EAT 2017];上下文层次结构的根 在org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:433) 在org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1004) 在org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:963) 在org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:750) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) 在com.nftconsult.gemfire.web.JavaWebClientApplication.main(JavaWebClientApplication.java:173) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 在org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 在org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 在org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
[错误2017/11/15 19:07:25.905 EAT tid = 0x1]销毁方法 豆的名字 ' org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory '抛出异常java.lang.IllegalStateException: ApplicationEventMulticaster未初始化 - 调用'刷新'之前 通过上下文组播事件:org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e6c3152: 启动日期[Wed Nov 15 19:07:24 EAT 2017];上下文层次结构的根 在org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:420) 在org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:95) 在org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:240) 在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:576) 在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:552) 在org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:953) 在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:521) 在org.springframework.beans.factory.support.FactoryBeanRegistrySupport.destroySingletons(FactoryBeanRegistrySupport.java:227) 在org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:960) 在org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1035) 在org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1011) 在org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:963) 在org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:750) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) 在org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) 在com.nftconsult.gemfire.web.JavaWebClientApplication.main(JavaWebClientApplication.java:173) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 在org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 在org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 在org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
C:\开发\项目\ JavaWebClient \网络\靶>
答案 0 :(得分:0)
因为您的 Spring 应用程序基于 Spring Boot 1.5.8.RELEASE
而且并不清楚您是如何专门升级 Spring的,所以并不奇怪数据GemFire 从1.9.7.RELEASE
到2.0.1.RELEASE
的依赖关系。
问题是,你正在引入一个不兼容的 Spring Data Commons 版本以及我怀疑的其他几个 Spring 依赖项(例如核心 > Spring Framework )因为您的应用程序植根于 Spring Boot 1.5.8.RELEASE
。因此 java.lang.NoSuchMethodError
错误......
java.lang.NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional;
at org.springframework.data.gemfire.repository.config.GemfireRepositoryConfigurationExtension.registerBeansForRoot(GemfireRepositoryConfigurationExtensi on.java:120)
首先,您需要了解所有Spring Data modules(请参阅" 主要模块"," 社区模块& #34;和" 相关模块"以及关于" 发布列车"在SD项目页面上的部分)构建在 Spring Data Commons 和核心 Spring Framework 的特定版本上。您不能只是升级1依赖项,而不希望升级其他依赖项。
SD版本系列(例如Ingalls或Kay)都基于特定版本的 Spring Data Commons 和核心 Spring Framework 。例如,使用SD Kay ,请参阅" Core themes"和" Participating modules"。
java.lang.NoSuchMethodError
是特别发生的,因为您正在使用 Spring Data Commons 的不兼容版本(即来自 Ingalls 的SDC 1.13.8.RELEASE
,这是 Spring Boot 1.5.x 的pulled in与 Spring Data GemFire 2.0.1.RELEASE
,comes from SD Kay,并期望SDC 2.0.x.RELEASE
。
此类(即org.springframework.data.repository.config.RepositoryConfigurationSource
)是 Spring Data Commons 类。显然,相关方法的SDC getAttribute(:String):String
( Ingalls )中的method signature(即1.13.8
)不 SDG {{ 1}}期望(即2.0.1.RELEASE
),comes from SDC getAttribute(:String):Optional<String>
。
Spring Boot ,以及 Spring IO平台,提供了一组策划和协调的依赖,这是有原因的。已经测试并且被证明可以合作。当你偏离规定的依赖关系时,你需要注意这一点。
从技术上讲,只有即将推出的 Spring Boot 2.0 版本将based on SD Kay 。
但是,如果您确实需要GA发布的 Spring Boot (即2.0.1.RELEASE
,即当前的最新版本),并希望使用 Spring Data GemFire {{ 1}},或 Kay-SR1 ,幸运的是你很幸运!
我也想使用 Spring Data Kay 与最新的GA版本的 Spring Boot (即1.5.8.RELEASE) Spring IO Guides(对于instance)展示 Spring Data GemFire 1.5.8.RELEASE
Kay 中的新功能,因为很多内容已经改变了更好(比如this)。
我能够让它工作,但我需要在Maven(或Gradle)构建文件中设置特定的东西,例如由 Spring Boot 管理的overriding the dependency versions of SD and the core Spring Framework(具体来说{ {3}}和this)。请注意this。另请注意我的this。
Gradle 有点棘手,但您可以看到新的构建文件dependencies,并将其与之前的版本here进行比较。
无论如何,下次你在编写依赖版本时要记住这些事情,这就是为什么首先创建 Spring IO Platform 的全部原因,以管理所有的依赖关系和依赖关系。依赖性(即传递依赖性)当可能发生重叠/冲突时(因为某些传递依赖性具有相同的依赖性)等等。
希望这有帮助!
此致 -j