@ Madmax - На какую версию матрицы совместимости вы ссылаетесь? Это "официальная" матрица совместимости версий .
. Как видите, последняя версия SBDG 1.1.x
имеет значение 1.1.6.RELEASE
, то есть на основе Spring Boot 2.1.13.RELEASE
.
Если мы go вернемся к SBDG 1.1.0.RELEASE
, мы увидим, что это было на основе Spring Boot 2.1.7.RELEASE
. Это создает каскадный эффект для транзитивных зависимостей.
Поскольку SBDG 1.1.0.RELEASE
основан на Spring Boot 2.1.7.RELEASE
, это означает, что SBDG 1.1.0.RELEASE
также требует Spring Data Lovelace-SR10
(который извлекается в от Boot 2.1.7.RELEASE
). Spring Data Lovelace-SR10
( здесь ) включает Spring Data для Apache Geode и Pivotal GemFire (SDG) 2.1.10.RELEASE
. Следовательно, SBDG 1.1.0.RELEASE
имеет минимальные требования для Spring Boot 2.1.7.RELEASE
и SDG 2.1.10.RELEASE
.
. Если мы повторим это упражнение для Spring Boot 2.1.3.RELEASE
, мы увидим, что Boot загружает Spring Data Lovelace-SR5 ( здесь ), который включает SDG 2.1.5.RELEASE
. SDG 2.1.5.RELEASE
не соответствует минимальному требованию для SBDG 1.1.0.RELEASE
.
Обратите внимание, что это распространяется на всю базовую Spring Framework, поскольку Spring Boot основан на ядре Spring Framework и использует его. и Spring Data также основывается на ядре Spring Framework. Поэтому все версии должны совпадать.
В общем случае нельзя объединять несовместимые версии. Если в матрице совместимости версий (или, если быть более точным, в файле SBDG gradle.properties
, , например ) указывается конкретная версия прямой или транзитивной зависимости, то эта версия зависимости ожидается и требуется.
Сказав это, я настроил пример / тестовый проект с SDDG 1.1.0.RELEASE
на основе Spring Boot 2.1.3.RELEASE
, чтобы посмотреть, смогу ли я воспроизвести вашу ошибку. Я сделал! Тем не менее, я получил более точное сообщение об ошибке:
Caused by: java.lang.AbstractMethodError: Receiver class org.springframework.geode.boot.autoconfigure.CacheNameAutoConfiguration$$Lambda$327/0x0000000800e48c40 does not define or inherit an implementation of the resolved method 'abstract void configure(java.lang.String, org.springframework.data.gemfire.client.ClientCacheFactoryBean)' of interface org.springframework.data.gemfire.config.annotation.ClientCacheConfigurer.
at org.springframework.data.gemfire.client.ClientCacheFactoryBean.lambda$null$0(ClientCacheFactoryBean.java:118)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1510)
at org.springframework.data.gemfire.client.ClientCacheFactoryBean.lambda$new$1(ClientCacheFactoryBean.java:117)
at org.springframework.data.gemfire.client.ClientCacheFactoryBean.lambda$applyClientCacheConfigurers$2(ClientCacheFactoryBean.java:156)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
at org.springframework.data.gemfire.client.ClientCacheFactoryBean.applyClientCacheConfigurers(ClientCacheFactoryBean.java:156)
at org.springframework.data.gemfire.client.ClientCacheFactoryBean.applyClientCacheConfigurers(ClientCacheFactoryBean.java:142)
at org.springframework.data.gemfire.client.ClientCacheFactoryBean.applyCacheConfigurers(ClientCacheFactoryBean.java:129)
at org.springframework.data.gemfire.CacheFactoryBean.afterPropertiesSet(CacheFactoryBean.java:177)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1821)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758)
... 29 more
После дальнейшего изучения я обнаружил проблему.
SBDG CacheNameAutoConfiguration
класс использует Интерфейс SDG ClientCacheConfigurer
для настройки «имени» экземпляра кэша GemFire / Geode.
Интерфейс SDG ClientCacheConfigurer
был определен , как в SDG 2.1.5.RELEASE
, что опять-таки загружено Spring Boot 2.1.3.RELEASE. However, in SDG
2.1.10.RELEASE , I [redefined][13] the
ClientCacheConfigurer interface (now, an
@ FunctionalInterface as well) in terms of a base
Интерфейс Configurer` ( this ). Хотя логически они имеют один и тот же интерфейс, байт-код (разрешения метода), без сомнения, отличается, и поэтому JRE не может разрешить метод.
Вы можете попробовать исключить класс CacheNameAutoConfiguration
из вашего Spring Boot (авто ) конфигурации, например, так:
@SpringBootApplication(exclude = CacheNameAutoConfiguration.class)
class PccTestApplication { ... }
Однако SBDG широко использует ClientCacheConfigurer
@FunctionalInterface
в нескольких областях автоматической настройки SBDG для настройки конфигурации SDG и GemFire / Geode для соглашений и удобства от имени пользователя.
Фактически мне пришлось исключить оба этих класса SBDG с автоматической настройкой , чтобы получить ваш пример / test работает правильно.
@SpringBootApplication(exclude = {
CacheNameAutoConfiguration.class,
ContinuousQueryAutoConfiguration.class
})
class PccTestApplication { ... }
Подробнее об отключении автоконфигурации см. здесь и здесь .
Однако я не Честно говоря, не рекомендую подходить в качестве ответа.
Уместно использовать совместимые версии, т. е. SBDG 1.1.0.RELEASE
действительно должен быть в паре с базовой версией Spring Boot 2.1.7.RELEASE
.
* 110. 6 * Более того, вам настоятельно рекомендуется использовать SBDG
1.1.6.RELEASE
в строке
1.1.x
с Spring Boot
2.1.13.RELEASE
.
Как упоминалось в другом сообщении SO, SBDG 1.1.7.RELEASE
с Spring Boot 2.1.14.RELEASE
ожидается в этот четверг, 4/30. Для получения дополнительной информации см. Календарь выпуска Spring .
Я бы также порекомендовал go еще больше и обновить до Spring Boot 2.2.x
(в настоящее время 2.2.6.RELEASE
) с SBDG 1.2.6.RELEASE
если это вообще возможно.
Надеюсь, это поможет!