如何在@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。
- 地址
- 信用卡
- IAddressRepository
- 地址数据访问
版本
- GemFire:9.8.6
- spring-data-gemfire : 2.1.0
- 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] Lovelace
或 2.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 中跟进。
当我向 @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。
- 地址
- 信用卡
- IAddressRepository
- 地址数据访问
版本
- GemFire:9.8.6
- spring-data-gemfire : 2.1.0
- 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
.
从技术上讲,最好更具体地说明您的类型匹配,并使用“ASSIGNABLE_TYPE”TypeFilter
代替,如此 test 所示。
最后,虽然 SDG 2.1.x
与 GemFire 9.8.x
、SD[G] Lovelace
或 2.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 中跟进。