Spring Boot Cache + Apache ignite + Spring Boot Actuator - приложение не запускается при выполнении тестов - PullRequest
1 голос
/ 02 апреля 2019

У меня есть проект, в котором я использую Spring Boot 2.0.0+, Spring Boot Cache, Apache Ignite, Spring Boot Actuator и TestNG.

Поскольку я обновил с версии 2.5 до версии 2.6+, у меня возникли проблемы при попытке запустить тесты приложений, потому что каждый раз, когда приложение запускается в тестовой задаче, функция зажигания не регистрирует свои показатели кэша.на 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

Я создал приложение, которое демонстрирует эту проблему, вы можете получить к нему доступ по этой ссылке:

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

Может кто-нибудь объяснить мне, что происходит и как я могу решить это?В настоящее время я застрял на версии 2.5 ...

Cheers

1 Ответ

1 голос
/ 03 апреля 2019

Трудно сказать, кто именно виноват, но, как вы можете видеть:

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, когда еще ничего не запущено.

...