原标题:Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程二(Spring中国教育管理中心)
5.4.配置缓存
要使用 Apache Geode,您需要创建一个新缓存或连接到现有缓存。使用当前版本的 Apache Geode,每个 VM 只能有一个打开的缓存(更严格地说,每个ClassLoader)。在大多数情况下,缓存应该只创建一次。
本节描述对等Cache成员的创建和配置,适用于对等 (P2P) 拓扑和缓存服务器。一个Cache成员也可以在独立的应用程序和集成测试使用。但是,在典型的生产系统中,大多数应用程序进程充当缓存客户端,ClientCache 而是创建实例。这在配置 Apache Geode ClientCache和客户端区域部分进行了描述。
Cache可以使用以下简单声明创建具有默认配置的对等方:
<gfe:cache/>
在 Spring 容器初始化期间,任何ApplicationContext包含此缓存定义的内容都会注册 a CacheFactoryBean,它会创建一个名为 的 Spring bean gemfireCache,该bean引用一个 Apache GeodeCache实例。这个 bean 指的是一个现有的,Cache或者一个新创建的,如果不存在的话。由于没有指定额外的属性,新创建的Cache应用默认缓存配置。
所有依赖Cache于此命名约定的Apache Geode 组件的 Spring Data ,因此您无需显式声明Cache依赖项。如果您愿意,可以使用cache-ref各种 SDG XML 命名空间元素提供的属性使依赖项显式化。此外,您可以使用该id属性覆盖缓存的 bean 名称,如下所示:
<gfe:cache id="myCache"/>
Cache可以使用 Spring 完全配置Apache Geode 。但是,Apache Geode 的原生 XML 配置文件cache.xml也受支持。对于需要原生配置Apache Geode缓存的情况,可以使用cache-xml-location属性提供对Apache Geode XML配置文件的引用,如下:
<gfe:cache id="cacheConfiguredWithNativeCacheXml" cache-xml-location="classpath:cache.xml"/>
在这个例子中,如果需要创建缓存,它会使用cache.xml位于类路径根目录中的一个名为的文件来配置它。
配置使用 Spring 的Resource 抽象来定位文件。该Resource抽象让不同的搜索模式使用,根据不同的运行环境或指定的前缀(如果有的话)的资源位置。
除了引用外部 XML 配置文件之外,您还可以指定使用任何 Spring 支持功能的Apache Geode System 属性Properties。
例如,您可以使用命名空间中定义的properties元素直接util定义Properties或从属性文件加载属性,如下所示:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:gfe="https://www.springframework.org/schema/geode" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd https://www.springframework.org/schema/geode https://www.springframework.org/schema/geode/spring-geode.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd "> <util:properties id="gemfireProperties" location="file:/path/to/gemfire.properties"/> <gfe:cache properties-ref="gemfireProperties"/></beans>
建议使用属性文件在应用程序配置之外外部化特定于环境的设置。
缓存设置仅在需要创建新缓存时应用。如果 VM 中已存在开放缓存,则这些设置将被忽略。
5.4.1.高级缓存配置
对于高级缓存配置,该cache元素提供了许多作为属性或子元素公开的配置选项,如下面的清单所示:
<gfe:cache cache-xml-location=".." properties-ref=".." close="false" copy-on-read="true" critical-heap-percentage="90" eviction-heap-percentage="70" enable-auto-reconnect="false" lock-lease="120" lock-timeout="60" message-sync-interval="1" pdx-serializer-ref="myPdxSerializer" pdx-persistent="true" pdx-disk-store="diskStore" pdx-read-serialized="false" pdx-ignore-unread-fields="true" search-timeout="300" use-bean-factory-locator="true" use-cluster-configuration="false" > <gfe:transaction-listener ref="myTransactionListener"/> <gfe:transaction-writer> <bean class="org.example.app.gemfire.transaction.TransactionWriter"/> </gfe:transaction-writer> <gfe:gateway-conflict-resolver ref="myGatewayConflictResolver"/> <gfe:jndi-binding jndi-name="myDataSource" type="ManagedDataSource"/> </gfe:cache>
属性支持各种缓存选项。有关此示例中显示的任何内容的更多信息,请参阅Spring中国教育管理中心 Apache Geode产品文档。该close属性决定了在 Spring 应用程序上下文关闭时是否应该关闭缓存。默认为true。但是,对于多个应用程序上下文使用缓存(在 Web 应用程序中很常见)的用例,请将此值设置为false。
将该enable-auto-reconnect属性设置为true(默认为false)可使断开连接的 Apache Geode 成员自动重新连接并重新加入 Apache Geode 集群。有关
更多详细信息,请参阅Spring中国教育管理中心 Apache Geode产品文档。
仅当 Spring (XML) 配置元数据和 Apache Geode都用于配置 Apache Geode 缓存节点(无论是客户端还是对等节点)时,将该use-bean-factory-locator属性设置为true(默认为false)才适用cache.xml。此选项允许 Apache Geode 组件(例如CacheLoader)cache.xml
与DataSource在 Spring 应用程序上下文中定义的bean(例如)自动连接。此选项通常与 结合使用cache-xml-location。
将该use-cluster-configuration属性设置为true(默认为false)使 Apache Geode 成员能够从定位器检索公共的、共享的基于集群的配置。有关
更多详细信息,请参阅 Spring中国教育管理中心 Apache Geode产品文档。
TransactionListener使用 bean 引用的回调声明示例。引用的 bean 必须实现
TransactionListener。TransactionListener可以实现A来处理事务相关的事件(例如 afterCommit 和 afterRollback)。
TransactionWriter使用内部 bean 声明的回调声明示例。bean 必须实现
TransactionWriter。这TransactionWriter是一个可以否决交易的回调。
GatewayConflictResolver使用 bean 引用的回调声明示例。引用的 bean 必须实现
https://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/util/GatewayConflictResolver.html
[GatewayConflictResolver]。AGatewayConflictResolver是一个Cache级别插件,用于决定如何处理源自其他系统并通过 WAN 网关到达的事件。它提供分布式区域创建服务。
声明 JNDI 绑定以在 Apache Geode 事务中登记外部数据源。
启用 PDX 序列化
前面的示例包括许多与 Apache Geode 的增强序列化框架 PDX 相关的属性。虽然对 PDX 的完整讨论超出了本参考指南的范围,但重要的是要注意 PDX 是通过注册 a 来启用的PdxSerializer,这是通过设置pdx-serializer属性指定的。
Apache Geode 提供了一个
org.apache.geode.pdx.ReflectionBasedAutoSerializer使用 Java 反射的实现类 ( )。但是,开发人员提供他们自己的实现是很常见的。该属性的值只是对实现该PdxSerializer接口的 Spring bean 的引用。
有关序列化支持的更多信息可以在使用 Apache Geode 序列化中找到。
启用自动重新连接
将<gfe:cache enable-auto-reconnect="[true|false*]>属性设置为 时应该小心true。
通常,只有在 Spring Data for Apache Geode 的 XML 命名空间用于配置和引导添加到集群的新的非应用程序 Apache Geode 服务器的情况下,才应启用“自动重新连接”。换句话说,当 Spring Data for Apache Geode 用于开发和构建 Apache Geode 应用程序时,不应启用“自动重新连接”,该应用程序也恰好是CacheApache Geode 集群的对等成员。
这种限制的主要原因是大多数 Apache Geode 应用程序使用对 Apache GeodeCache或 Regions 的引用 来执行数据访问操作。这些引用由 Spring 容器“注入”到应用程序组件(例如存储库)中以供应用程序使用。当对等成员与集群的其余部分强行断开连接时,大概是因为对等成员变得无响应或网络分区将一个或多个对等成员分成太小而无法作为独立分布式系统运行的组,对等成员将关闭并且所有 Apache Geode 组件引用(缓存、区域等)都变得无效。
从本质上讲,当前每个对等成员中的强制断开处理逻辑从头开始拆除系统。JGroups 堆栈关闭,分布式系统进入关闭状态,最后,缓存关闭。实际上,所有内存引用都变得陈旧并丢失。
与分布式系统断开连接后,对等成员进入“重新连接”状态,并定期尝试重新加入分布式系统。如果对等成员成功重新连接,则该成员从现有成员重建其分布式系统“视图”并接收新的分布式系统 ID。此外,所有缓存、区域和其他 Apache Geode 组件都被重建。因此,所有可能已被 Spring 容器注入应用程序的旧引用现在都已过时且不再有效。
Apache Geode 不保证(即使使用 Apache Geode 公共 Java API)重新连接操作会自动刷新应用程序缓存、区域或其他组件引用。因此,Apache Geode 应用程序必须注意刷新它们自己的引用。
不幸的是,无法收到断开连接事件以及随后的重新连接事件的通知。如果是这种情况,您将有一个干净的方法来知道何时调用
ConfigurableApplicationContext.refresh(),如果它甚至适用于应用程序这样做,这就是为什么不建议对等Cache应用程序使用 Apache Geode 的这个“功能” 。
有关“自动重新连接”的更多信息,请参阅 Apache Geode 的Spring中国教育管理中心产品文档。
使用基于集群的配置
Apache Geode 的集群配置服务是加入集群的任何对等成员通过使用由定位器维护的共享、持久配置获得集群“一致视图”的便捷方式。使用基于集群的配置可确保对等成员的配置在成员加入时与 Apache Geode 分布式系统兼容。
Spring Data for Apache Geode 的这个特性(将use-cluster-configuration属性设置为true)的工作方式与cache-xml-location属性相同,除了 Apache Geode 配置元数据的来源通过定位器来自网络,而不是cache.xml驻留在本地文件系统。
所有 Apache Geode 本机配置元数据,无论是来自cache.xml还是来自集群配置服务,都在任何 Spring (XML) 配置元数据之前应用。因此,Spring 的配置用于“增强”本机 Apache Geode 配置元数据,并且很可能特定于应用程序。
同样,要启用此功能,请在 Spring XML 配置中指定以下内容:
<gfe:cache use-cluster-configuration="true"/>
虽然某些 Apache Geode 工具(例如Gfsh )在进行类似模式的更改(例如,gfsh>create region --name=Example --type=PARTITION)时会“记录”其操作,但不会记录用于 Apache Geode 的配置元数据的 Spring Data。直接使用 Apache Geode 的公共 Java API 时也是如此。它也没有被记录下来。
有关 Apache Geode 的集群配置服务的更多信息,请参阅Spring中国教育管理中心产品文档。
共同学习,写下你的评论
评论加载中...
作者其他优质文章