点燃缓存查询无法正常工作

时间:2017-10-04 13:42:12

标签: caching cassandra ignite

第一次启动远程缓存服务器时它会提供输出,但第二次查询不起作用,但我在客户端节点上获得缓存大小。即使我可以通过cache.iterator()获取数据,但不通过sql获取缓存查询,也不通过文本查询进行扫描。

代码: -

 List<Cache.Entry<PersonKey, Person>> as = cache.query(new SqlQuery<PersonKey, Person>(Person.class, sql).
                setArgs("Manish")).getAll();

        System.out.println("data " + as);
        System.out.println("size " + cache.size());
        Iterator<Cache.Entry<PersonKey, Person>> abc = cache.iterator();
        while (abc.hasNext()) {
            Cache.Entry<PersonKey, Person> data = abc.next();
            System.out.println("data " + data);
        }
        for (Cache.Entry<PersonKey, Person> e : as) {
            System.out.println(e.getValue().toString());
        }

        SqlFieldsQuery qry = new SqlFieldsQuery("select firstname, lastname from Person where firstname='Manish'");

        try (FieldsQueryCursor<List<?>> cursor = cache.query(qry)) {
            for (List<?> row : cursor) {
                System.out.println("firstname:" + row.get(0) + ", lastname:" + row.get(1));
            }
        }

我的缓存配置: -

    <import resource="classpath:cassandra/connection-settings.xml" />

<!-- Persistence settings for 'cache1' -->
<bean id="cache1_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
    <constructor-arg type="org.springframework.core.io.Resource" value="classpath:persistence/primitive/persistence-settings-1.xml" />
</bean>

<!-- Ignite configuration -->
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <list>
            <!-- Configuring persistence for "cache1" cache -->       
            <bean class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="cache1"/>
                <property name="readThrough" value="false"/>
                <property name="writeThrough" value="true"/>
                <property name="writeBehindEnabled" value="true"/>
                <property name="writeBehindFlushSize" value="2"/>
                <!--                    <property name="atomicityMode" value="TRANSACTIONAL"/>
                <property name="backups" value="1"/>-->
                <property name="cacheStoreFactory">
                    <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
                        <property name="dataSourceBean" value="cassandraAdminDataSource" />
                        <property name="persistenceSettingsBean" value="cache1_persistence_settings"/>
                    </bean>
                </property>
                <property name="queryEntities">
                    <list>
                        <bean class="org.apache.ignite.cache.QueryEntity">
                            <property name="keyType" value="com.manish.igniteexample.PersonKey"/>
                            <property name="valueType" value="com.manish.igniteexample.Person"/>

                            <property name="fields">
                                <map>
                                    <entry key="firstname" value="java.lang.String"/>
                                    <entry key="lastname" value="java.lang.String"/>
                                    <entry key="age" value="java.lang.Integer"/>
                                    <entry key="married" value="java.lang.Boolean"/>
                                    <entry key="birthDate" value="java.util.Date"/>
                                    <entry key="phone" value="java.lang.Integer"/>
                                </map>
                            </property>

                            <property name="indexes">
                                <list>
                                    <bean class="org.apache.ignite.cache.QueryIndex">
                                        <constructor-arg value="firstname"/>
                                    </bean>
                                    <bean class="org.apache.ignite.cache.QueryIndex">
                                        <constructor-arg value="lastname"/>
                                    </bean>
                                </list>
                            </property>
                        </bean>
                    </list>
                </property>
            </bean>
        </list>
    </property>
    <property name="clientMode" value="false"/>

我的输出程序如图所示

enter image description herefirst time execution

1 个答案:

答案 0 :(得分:1)

通过更正我的POJO类,在QuerySqlField中添加name属性来解决此问题。

public class Person {

   @QuerySqlField(name = "firstname" , index = true)
   private String firstname;

   @QuerySqlField(name = "last_name" , index = true)
   private String lastname;

   @QuerySqlField(name = "age")
   private int age;

   @QuerySqlField(name = "married")
   private boolean married;

   @QuerySqlField(name = "birth_date")
   private Date birthDate;

   @QuerySqlField(name = "phones")
   private String phones;

   /**
    * getter and setter methods ...
    */ 
 }