1 回答
TA贡献1806条经验 获得超8个赞
在我的例子中,我绝对不能使用@EnableClusterConfiguration(仍然想知道为什么)。根据 John 的说法,我们可以使用 gfsh 创建区域。由此我想到在 Spring Boot CacheServer 上做同样的事情。那么,如果我在 CacheServer 定义 POJO 并让注释 @EnableEntityDefinedRegions 完成在 CacheServer 端创建区域的工作,该怎么办?我又借了
serverRegionShortcut = RegionShortcut.PARTITION_PERSISTENT
来自约翰,但我把它放在
@EnableEntityDefinedRegions
除此之外,我还需要保留我的 PDX 类型(如果我不在 CacheServer 端保留 Pdx 类型,Spring 和/或 Geode Gemfire 不喜欢我)。因此,我使用相同的方法从SpringData Gemfire DiskStore进行持久化,但我在 CacheServer 端实现它,并在 application.properties 中添加一些附加条目来告诉 spring 也持久化 Pdx 类型。
这样,我就能够在 CacheServer 端成功创建和持久化 Region,并且还能够持久化 Pdx。
这是我借用SpringData Gemfire DiskStore的想法制作的完整代码和 application.properties 。
如果有人能够告诉我这个解决方法是否是一个好方法,或者是否有其他方法或更好的想法(仍然想知道为什么 @EnableClusterConfiguration 不喜欢我,而其他人对此没有问题:= (所以,如果有人能够告诉我我的错误在哪里,我真的很感激)。
客户 :
@SpringBootApplication
@ClientCacheApplication(logLevel = "debug", locators = {@Locator(host = "localhost", port = 10334)})
@EnablePool(name="neptunusPool", servers=@Server(host="localhost", port=41414))
@EnableGemfireRepositories(basePackageClasses= {TitleContentRepository.class})
@EnableEntityDefinedRegions(basePackageClasses= {TitleContent.class
})
//@ReplicateRegion
//@EnableClusterDefinedRegions
//@EnableCachingDefinedRegions
//@EnableGemfireCaching
@EnableIndexing
//@EnableClusterConfiguration
@EnablePdx
public class CommerceHostGeodeApplication {
public static void main(String[] args) {
SpringApplication.run(CommerceHostGeodeApplication.class, args);
}
}
在客户端,相同的 POJO、Repository 和 RestController,除了 server.port 定义之外,application.properties 中没有任何内容。
缓存服务器:
@SpringBootApplication
@CacheServerApplication(locators="localhost[10334]", name="GeodeServerApplication" )
@EnableCacheServer(name="neptunus", autoStartup=true, hostnameForClients = "localhost", port = 41414)
@EnableCachingDefinedRegions
@EnableGemfireCaching
@EnablePdx
@EnableManager
@EnableHttpService
@EnableDiskStore(name = "disk_store")
@EnableEntityDefinedRegions(basePackageClasses= {TitleContent.class
}, serverRegionShortcut = RegionShortcut.PARTITION_PERSISTENT)
public class GeodeServerApplication {
public static void main(String[] args) {
SpringApplication.run(GeodeServerApplication.class, args);
}
}
CACHESERVER application.properties :
server.port=15010
spring.data.gemfire.disk.store.name=disk_store
spring.data.gemfire.disk.store.directory.location=/Users/ars/geode/data
spring.data.gemfire.pdx.disk-store-name=disk_store
spring.data.gemfire.pdx.persistent=true
spring.data.gemfire.management.use-http=true
CacheServer 启动后,区域将被创建并能够持久/保存到磁盘。
添加回答
举报