如何在@EnableEntityDefinedRegion中添加ComponentScan.Filter

How to add ComponentScan.Filter in @EnableEntityDefinedRegion

当我向 @EnableEntityDefinedRegion 添加一个 includeFilter 时,它仍然扫描整个实体包并创建所有区域 bean。如何扫描特定区域 class?例如,只有“地址”区域。

package org.test.entity
@Getter
@Setter
@Region("Address")
public class GfAddress implements Serializable

package org.test.entity
@Getter
@Setter
@Region("CreditCard")
public class GfCreditCard implements Serializable

package org.test.package
public interface IAddressRepository extends GemfireRepository<GfAddress, String>

package org.test.package
public interface ICreditCardRepository extends GemfireRepository<GfCreditCard , String>

@Service
@ClientCacheApplication
@EnableGemfireRepositories(basePackages = IAddressRepository.class, includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes=AddressRepository.class))
@EnableEntityDefinedRegion(basePackages = GfAddress.class, includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern="GfAddress*"))
public class AddressDataAccess

当我打印所有加载的 beans 时,我发现创建了以下 beans。

  1. 地址
  2. 信用卡
  3. IAddressRepository
  4. 地址数据访问

版本

  1. GemFire:9.8.6
  2. spring-data-gemfire : 2.1.0
  3. Spring 引导:2.1.0

抱歉耽搁了。

首先,看看我提交的 SDG JIRA 工单,DATAGEODE-352 - "EnableEntityDefinedRegions.includeFilters are inappropriately overridden by framework provided include filters"

在这张票中,我在评论中描述了这个错误 (!) 的几个解决方法,从 here.

开始

我也会注意你的正则表达式。我不是 正则表达式 专家,但我确信“GfAddress*”不会正确匹配您正在搜索并尝试匹配的应用程序实体类型,即使您选择了新的 SDG 位解决了我提交的问题。

我使用 REGEX 创建了一个类似的测试来验证问题的解决,here. This is the REGEX I specified。正如我所怀疑的那样,使用“Programmer*”没有用!这是因为 REGEX 无效并且与 Spring RegexPatternTypeFilter.

中使用的 FQCN 不匹配

从技术上讲,最好更具体地说明您的类型匹配,并使用“ASSIGNABLE_TYPE”TypeFilter 代替,如此 test 所示。

最后,虽然 SDG 2.1.x 与 GemFire 9.8.x、SD[G] Lovelace2.1.x(例如 2.1.18.RELEASE)兼容,但正式基于且仅“支持”VMware GemFire 9.5.x (currently 9.5.4).

SDG 2.2.x 正式基于并“支持”VMware GemFire 9。8.x (currently at 9.8.8).

您可以查看 SDG Version Compatibility Matrix 了解更多详情。

如果您有更多问题,请在此处或 DATAGEODE-352 中跟进。