如何确定Spring Data Gemfire查询是否使用Gemfire索引?

时间:2015-04-02 20:38:04

标签: spring-data gemfire oql spring-data-gemfire

我正在尝试确定我的所有Spring Data Gemfire查询是否都在使用Gemfire服务器上定义的索引。

使用OQL,我知道我可以添加&#34; <trace>&#34;在gemfire日志中,它将显示是否正在使用索引:

@Query("<trace> SELECT c FROM /customer c, c.emailAddresses email WHERE email.emailAddress = $1")
CustomerEntity findByEmailAddress(String emailAddress);

但是我们没有定义OQL的方法怎么样呢? (假设用户名不是客户区域的密钥):

CustomerEntity findByUsername(String username);

1 个答案:

答案 0 :(得分:0)

好问题。遗憾的是,基于名称中使用的方法名称和约定生成GemFire OQL查询的Repository方法不支持TRACE或其他OQL语​​句,如IMPORT

正如您可能知道的那样,Spring Data GemFire's Repository support建立在Spring Data Commons Repository infrastructure之上,它保持了数据存储支持最广泛范围的最小公分母(关系,键值,文档等)。

但是,您可以通过设置GemFire系统属性来启用所有GemFire OQL查询的调试...

-Dgemfire.Query.VERBOSE=true

启动您的应用程序时。有关详细信息,请参阅GemFire's User Guide on Query Debugging

不幸的是,如果你只是想跟踪你的一个OQL查询,这会更加冗长,但是会完成你想要的。

基于Repository方法在单个OQL查询中进行TRACE的唯一方法是使用上面说明的@Query注释。

@Query("<trace> SELECT c FROM /customer c, c.emailAddresses email WHERE email.emailAddress = $1")
CustomerEntity findByEmailAddress(String emailAddress);

你的问题确实给了我一些想法。我想通过这样的注释提供IMPORT和TRACE支持......

@Trace
@Import("example.app.domain.CustomerEntity")
CustomerEntity findByUsername(String username);

这将是非常优雅和有用的。

请参阅我提交的新JIRA票证(SGF-392)以添加对此功能的支持。

谢谢!