Spring Boot Cache + Apache ignite + Spring Boot Actuator-运行测试时应用程序无法启动

时间:2019-04-02 18:26:10

标签: java spring-boot testng ignite spring-boot-actuator

我有一个项目,在其中使用Spring Boot 2.0.0 +,Spring Boot Cache,Apache Ignite,Spring Boot Actuator和TestNG。

由于我已从ignite 2.5升级到ignite 2.6+,因此在尝试运行应用程序测试时遇到了问题,因为每次应用程序在测试Task上启动时,ignite都无法在{上注册其缓存指标{1}}。

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

CacheMetricsRegistrarConfiguration

我已经创建了一个展示此问题的应用程序,您可以通过以下链接访问它:

https://github.com/pmrochaubi/apache-ignite-spring-boot-actuator

有人可以告诉我发生了什么事,我该如何解决?目前,我只能使用2.5版...

欢呼

2 个答案:

答案 0 :(得分:1)

很难说到底是谁应受的责备,但正如您所见:

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启动并且在onApplicationEvent()上调用SpringCacheManager之后。

对于执行器的CacheMetricsRegistrarConfiguration,这是一个有趣的问题,为什么当没有任何启动时,他们感到需要在@PostConstruct方法中调用此方法。

答案 1 :(得分:0)

对我有用的一种解决方案是将其添加到主类中,此自动配置将针对指标禁用,您必须根据需要进行自己的配置。

@EnableAutoConfiguration(exclude = {CacheMetricsAutoConfiguration.class})