我在PCF上托管了一个springboot应用,试图连接到PCC(关键云缓存)。我启动了一个PCC实例,并将其绑定到我的应用程序,并将该应用程序推送到了Cloud Foundry。我已经将所有必需的gemfire启动器依赖项添加到springboot中,看来它能够从VCAP_SERVICES中读取定位器和服务器信息。但是,我在春季启动应用启动时看到以下错误。
Error prefilling connections : org.apache.geode.security.AuthenticationRequiredException: No security credentials are provided
org.apache.geode.security.AuthenticationRequiredException: No security credentials are provided
at org.apache.geode.internal.cache.tier.sockets.Handshake.readMessage(Handshake.java:320)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.geode.cache.Region]: Failed to create Region for cache [TestRegion]; nested exception is org.apache.geode.security.AuthenticationRequiredException: No security credentials are provided
这是我的依赖项列表
<dependency>
<groupId>org.springframework.geode</groupId>
<artifactId>spring-gemfire-starter</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-gemfire</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.pivotal.gemfire</groupId>
<artifactId>geode-core</artifactId>
<version>9.5.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.pivotal.gemfire</groupId>
<artifactId>geode-common</artifactId>
<version>9.5.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.pivotal.gemfire</groupId>
<artifactId>geode-cq</artifactId>
<version>9.5.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.pivotal.gemfire</groupId>
<artifactId>geode-lucene</artifactId>
<version>9.5.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.pivotal.gemfire</groupId>
<artifactId>geode-wan</artifactId>
<version>9.5.4</version>
<scope>compile</scope>
</dependency>
@Configuration
@ClientCacheApplication(name = "Test", logLevel = "info")
@EnableCachingDefinedRegions(
clientRegionShortcut = ClientRegionShortcut.PROXY,
serverRegionShortcut = RegionShortcut.REPLICATE_HEAP_LRU)
@EnableClusterAware
@EnablePdx
public class CloudConfiguration {}
我相信,我具有的Springboot gemfire启动器依赖项足以从VCAP_SERVICES自动读取安全性凭证,而无需任何手动操作。但是,我看到它没有得到认可,不确定在拥有以下所有依赖项之后为什么会这样做。有人可以帮忙吗?谢谢
确定...
首先,请参阅我的[[answer],有关您的应用程序依赖项的最后一个SO post。正确声明应用程序依赖性是我的回答的中心主题。
接下来,Spring Data GemFire(SDG)本身在使用PCC时,将无法在PCF等托管环境中“自动”处理身份验证。为此,您绝对需要用于Apache Geode或Pivotal GemFire的Spring Boot
(SBDG),在您的情况下,则需要“ 。对于Pivotal GemFire”,从技术上讲,还需要org.springframework.geode:spring-gemfire-starter
依赖项,这是您唯一需要的依赖项。确保按照我在先前的post中的指示对齐版本。基于上面的配置,由于您在@ClientCacheApplication
类上显式声明了CloudConfiguration
注释,因此您显式“ overrode
”客户端安全性配置和SBDG提供的自动配置。 >为什么?再次,这是GemFire / Geode的事情,不是Spring的事情,但是必须正确配置和设置涉及GemFire / Geode(客户端/服务器,P2P,WAN等)的所有形式的“安全性”, [之前
缓存对象的构造和初始化。如果已经由用户/应用程序配置提供了缓存对象,则将 Spring
[另外,无论是否(明确地)使用SDG的配置注释,而不是使用JavaConfig在Spring上下文中声明显式bean,效果都是相同的,因为SDG配置注释是为您隐式声明那些bean,这导致“覆盖“ Spring Boot提供的自动配置,尤其是SBDG。
无论是否使用GemFire / Geode,这都相同。如果您显式声明一个SQLDataSource
bean,那么当您的应用程序类路径上具有嵌入式数据库(H2或HSQL)时,您将告诉Boot重写提供的DataSource
。这个概念是“ 通过配置的约定”(只需声明对应用程序类路径的依赖关系,即可自动神奇地启用功能),但当您的应用程序需求与默认值和您必须显式声明一个特定类型的Bean定义,以便根据您的应用程序要求更改配置,这必然会禁用
Spring Boot
提供的auto-config,否则,您将感到模棱两可且/或配置冲突(即是哪个)。通常,Spring Framework
甚至不允许这样做。再次,删除@ClientCacheApplication
和@EnablePdx
。您不需要SBDG。但是,是@ClientCacheApplication
注释在这里引起您的问题。
[Chapter 7 - Externalized Configuration(在
附录
中带有configuration meta-data reference)。