Java Spring引导缓存&x2B;ApacheIgnite+;弹簧启动执行器-运行测试时应用程序无法启动

Java Spring引导缓存&x2B;ApacheIgnite+;弹簧启动执行器-运行测试时应用程序无法启动,java,spring-boot,testng,ignite,spring-boot-actuator,Java,Spring Boot,Testng,Ignite,Spring Boot Actuator,我有一个项目,我使用SpringBoot2.0.0+、SpringBootCache、ApacheIgnite、SpringBootActuator和TestNG 自从我从ignite 2.5升级到ignite 2.6+,我在尝试运行应用程序测试时一直面临问题,因为每次应用程序启动测试任务时,ignite都无法在CacheMetricsRegistrConfiguration上注册其缓存度量 应用程序失败,出现以下异常: org.springframework.beans.factory.Bea

我有一个项目,我使用SpringBoot2.0.0+、SpringBootCache、ApacheIgnite、SpringBootActuator和TestNG

自从我从ignite 2.5升级到ignite 2.6+,我在尝试运行应用程序测试时一直面临问题,因为每次应用程序启动测试任务时,ignite都无法在
CacheMetricsRegistrConfiguration
上注册其缓存度量

应用程序失败,出现以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsRegistrarConfiguration': Invocation of init method failed; nested exception is java.lang.AssertionError
我已经创建了一个显示此问题的应用程序,您可以通过以下链接访问它:

有人能给我解释一下发生了什么事以及我如何解决这个问题吗?目前我被困在2.5版上


干杯

这里很难说到底是谁的错,但正如你所看到的:

Caused by: java.lang.AssertionError: null
    at org.apache.ignite.cache.spring.SpringCacheManager.getCacheNames(SpringCacheManager.java:371) ~[ignite-spring-2.7.0.jar:2.7.0]
    at org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsRegistrarConfiguration.bindCacheManagerToRegistry(CacheMetricsRegistrarConfiguration.java:73) ~[spring-boot-actuator-autoconfigure-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:1.8.0_144]
    at org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsRegistrarConfiguration.bindCachesToRegistry(CacheMetricsRegistrarConfiguration.java:69) ~[spring-boot-actuator-autoconfigure-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    ... 73 common frames omitted
SpringCacheManager.getCacheNames()
是从
postProcessBeforeInitialization()
调用的。但是,很明显,您只能在缓存初始化之后获取缓存名称,例如,在Ignite启动并且在
SpringCacheManager
上调用
onApplicationEvent()
之后


对于执行器的
CacheMetricsRegistrConfiguration
来说,这是一个有趣的问题,为什么他们觉得需要在
@PostConstruct
方法中调用此方法,而什么都没有启动。

对我有效的一个解决方案是将其添加到主类中,使用此自动配置将禁用度量,您必须根据需要进行自己的配置

@EnableAutoConfiguration(exclude = {CacheMetricsAutoConfiguration.class})

你有什么想法吗?我怎么解决?我可以在测试中禁用cachemanager,但我不喜欢此解决方案。您可以在返回它之前调用
SpringCacheManager
上的
onApplicationEvent()
。您可以提供一个如何实现此功能的示例吗?
cachemanager.onApplicationEvent(null)执行前
返回
但是applicationEvent
上的方法
不存在