2

以下のコードを使用して、春のデータを使用して cassandra に接続しています。しかし、毎回接続を作成するのは苦痛です。

try {
            cluster = Cluster.builder().addContactPoint(host).build();
            session = cluster.connect("digitalfootprint");
            CassandraOperations cassandraOps = new CassandraTemplate(session);
            Select usersQuery = QueryBuilder.select(userColumns).from("Users");
            usersQuery.where(QueryBuilder.eq("username", username));
            List<Users> userResult = cassandraOps
                    .select(usersQuery, Users.class);
            userList = userResult;
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            cluster.close();
        }

一般的な静的接続またはユーティリティの種類のものを使用する方法はありますか? 多くのCRUD操作が行われるWebアプリケーションでこれを使用しています。そのため、どこでもコードを繰り返すのは面倒です。

4

1 に答える 1

2

Spring Web アプリケーションの起動時に適切な Bean をインスタンス化するだけです。例は次のとおりです。

@Configuration
public class CassandraConfig {

    @Bean
    public CassandraClusterFactoryBean cluster() throws UnknownHostException {
        CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
        cluster.setContactPoints(InetAddress.getLocalHost().getHostName());
        cluster.setPort(9042);
        return cluster;
    }

    @Bean
    public CassandraMappingContext mappingContext() {
        return new BasicCassandraMappingContext();
    }

    @Bean
    public CassandraConverter converter() {
        return new MappingCassandraConverter(mappingContext());
    }

    @Bean
    public CassandraSessionFactoryBean session() throws Exception {

        CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
        session.setCluster(cluster().getObject());
        session.setKeyspaceName("mykeyspace");
        session.setConverter(converter());
        session.setSchemaAction(SchemaAction.NONE);

        return session;
    }

    @Bean
    public CassandraOperations cassandraTemplate() throws Exception {
        return new CassandraTemplate(session().getObject());
    }
}

CassandraOperations Bean をいつでもInject または Autowireできます。

于 2015-11-26T11:59:15.243 に答える