2

我正在使用以下代码使用 spring 数据与 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();
        }

有什么方法可以让我们拥有一个通用的静态连接或实用程序类型的东西。我在 Web 应用程序中使用它,其中会有很多 CRUD 操作。所以到处重复代码会很痛苦。

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

于 2015-11-26T11:59:15.243 回答