2017-09-12 2 views
0

私は次の問題があります。セッションリストから始まるCassandraテンプレートのリストを作成したいと思います。しかし、問題は、実行時にセッションojectがnullであることがわかります。 私が使用するコードは以下の通りです:Cassandraセッションが実行時にnullになる

import java.util.ArrayList; 
import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.data.cassandra.config.CassandraClusterFactoryBean; 
import org.springframework.data.cassandra.config.CassandraSessionFactoryBean; 
import org.springframework.data.cassandra.config.SchemaAction; 
import org.springframework.data.cassandra.convert.CassandraConverter; 
import org.springframework.data.cassandra.core.CassandraOperations; 
import org.springframework.data.cassandra.core.CassandraTemplate; 
import org.springframework.stereotype.Component; 

@Component 
public class KeyspaceSession { 

    @Autowired 
    @Qualifier("cluster") 
    CassandraClusterFactoryBean cluster; 

    @Autowired 
    @Qualifier("converter") 
    CassandraConverter converter; 


    public List<CassandraOperations> getTemplates(){ 
     List<CassandraOperations> listOfTemplates = new ArrayList<>(); 
     for(CassandraKeyspaces keyspace : CassandraKeyspaces.values()){ 
      CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
      session.setCluster(cluster.getObject()); 
      session.setKeyspaceName(keyspace.getKeyspace()); 
      session.setConverter(converter); 
      session.setSchemaAction(SchemaAction.CREATE_IF_NOT_EXISTS); 
      CassandraOperations op = new CassandraTemplate(session.getObject()); 
      listOfTemplates.add(op); 
     } 
     return listOfTemplates; 
    } 

} 

私は、サーバーから次のような答えを得る:

{ 
    "timestamp": 1505204641753, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "java.lang.IllegalArgumentException", 
    "message": "Session must not be null", 
    "path": "/getUser/10/pl" 
} 

答えて

1

CassandraSessionFactoryBeanは、初期化が必要です。 Sessionを入手する前にCassandraSessionFactoryBean.afterPropertiesSet()に電話してください。また、アプリケーションのシャットダウン時にセッションをクリーンアップする必要があります。

理想的には、作成するそれぞれSessionCassandraOperationsのBeanに対して、BeanDefinitionを登録します。

参考文献:

0

を、私は何かが欠けていた場合ので、私を許して前に私は春に働いていません。しかし、私はあなたがどの接点を設定したかを知ることができないので、どのクラスターに照会するのか、ドライバーはどのように知っていますか?

はこれを試してください:あなたはすべてのプロパティを設定した後

cluster.setContactPoints(<cassandra_server_ip>); 
+0

私は、クラスタおよびコンバータを注入しています、なぜこれがある、ということない設定クラスを持っている: – Carolik

+0

アイデアは私がしたいということですテンプレートとセッションをdinamically生成し、それらを循環させ、必要条件に応じて適切なものを使用します。これまでは、Configurationクラスで複数のテンプレートを作成してセッションを増やすことしかできませんでしたが、プロパティファイルからキースペースを読み込んで、セッションと対応するテンプレートをdinamically生成します。 – Carolik

+0

これで分かりました。しかし、これは私の知識を超えて、誰かがあなたを助けることを願っています。 –

関連する問題