Spring 引导缓存 + Apache ignite + Spring 引导执行器 - 运行 测试时应用程序无法启动
Spring Boot Cache + Apache ignite + Spring Boot Actuator - Application fail to start when running tests
我有一个项目,我使用 Spring Boot 2.0.0+、Spring Boot Cache、Apache Ignite、Spring Boot Actuator 和 TestNG。
自从我从 ignite 2.5 升级到 ignite 2.6+ 后,我在尝试 运行 应用程序测试时一直遇到问题,因为每次应用程序在测试任务上启动时,ignite 都无法注册它是 CacheMetricsRegistrarConfiguration
上的缓存指标。
申请失败,出现以下异常:
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
我创建了一个展示此问题的应用程序,您可以通过此 link 访问它:
https://github.com/pmrochaubi/apache-ignite-spring-boot-actuator
有人可以向我解释发生了什么以及我该如何解决这个问题吗?目前我停留在 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 启动后 onApplicationEvent()
在 SpringCacheManager
.
上调用
对于执行器的 CacheMetricsRegistrarConfiguration
来说,这是一个有趣的问题,为什么他们觉得需要在 @PostConstruct
方法中调用此方法,而尚未启动任何内容。
对我有用的一个解决方案是将其添加到主class,使用此自动配置将禁用 Metrics,您必须根据需要进行自己的配置。
@EnableAutoConfiguration(exclude = {CacheMetricsAutoConfiguration.class})
我有一个项目,我使用 Spring Boot 2.0.0+、Spring Boot Cache、Apache Ignite、Spring Boot Actuator 和 TestNG。
自从我从 ignite 2.5 升级到 ignite 2.6+ 后,我在尝试 运行 应用程序测试时一直遇到问题,因为每次应用程序在测试任务上启动时,ignite 都无法注册它是 CacheMetricsRegistrarConfiguration
上的缓存指标。
申请失败,出现以下异常:
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
我创建了一个展示此问题的应用程序,您可以通过此 link 访问它:
https://github.com/pmrochaubi/apache-ignite-spring-boot-actuator
有人可以向我解释发生了什么以及我该如何解决这个问题吗?目前我停留在 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 启动后 onApplicationEvent()
在 SpringCacheManager
.
对于执行器的 CacheMetricsRegistrarConfiguration
来说,这是一个有趣的问题,为什么他们觉得需要在 @PostConstruct
方法中调用此方法,而尚未启动任何内容。
对我有用的一个解决方案是将其添加到主class,使用此自动配置将禁用 Metrics,您必须根据需要进行自己的配置。
@EnableAutoConfiguration(exclude = {CacheMetricsAutoConfiguration.class})