Spring Boot 数据嵌入式Cassandra

bpsygsoo  于 2022-11-05  发布在  Cassandra
关注(0)|答案(4)|浏览(303)

在我的Sping Boot 1.5.1应用程序中,我将为Cassandra相关逻辑编写单元/集成测试。
我添加了以下Maven依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>

默认的Sping Boot Cassandra配置将与真实的的Cassandra DB服务器连接。
在Spring/Sping Boot 中是否有任何选项可以配置我的测试使用嵌入式Cassandra服务器?如果有,请显示所需的配置。

gfttwv5a

gfttwv5a1#

我们在项目中使用Cassandra + Sping Boot 。以下是对我们有效的步骤:
a)按如下方式配置测试

import org.cassandraunit.spring.CassandraDataSet;
import org.cassandraunit.spring.CassandraUnitDependencyInjectionTestExecutionListener;
import org.cassandraunit.spring.CassandraUnitTestExecutionListener;
import org.cassandraunit.spring.EmbeddedCassandra;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class)
@TestExecutionListeners(listeners = {
    CassandraUnitDependencyInjectionTestExecutionListener.class,
    CassandraUnitTestExecutionListener.class,
    ServletTestExecutionListener.class,
    DependencyInjectionTestExecutionListener.class,
    DirtiesContextTestExecutionListener.class
})
@EmbeddedCassandra(timeout = 60000)
@CassandraDataSet(value = {"bootstrap_test.cql"}, keyspace = "local_test")
public abstract class BaseTest {

B)在您的src/test/resources/ www.example.com中application.properties,添加以下内容(请注意,嵌入式cassandra在端口9142上启动,而不是默认的9042)

spring.data.cassandra.port=9142
spring.data.cassandra.keyspace-name=local_test

c)在src/test/resources中创建空文件bootstrap_test.cql
d)添加到pom.xml

<dependency>
        <groupId>org.cassandraunit</groupId>
        <artifactId>cassandra-unit-spring</artifactId>
        <version>${cassandra-unit.version}</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.cassandraunit</groupId>
                <artifactId>cassandra-unit</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.cassandraunit</groupId>
        <artifactId>cassandra-unit-spring</artifactId>
        <version>${cassandra-unit.version}</version>
    </dependency>

这应该足以运行您的测试与嵌入式 cassandra 。希望它有帮助。

wvyml7n5

wvyml7n52#

Sping Boot 中没有嵌入式Apache Cassandra支持,也没有计划这样做。一方面,对嵌入式Apache Cassandra的需求很少,另一方面,Apache Cassandra附带了很多依赖项,这些依赖项与Boot的其他依赖项冲突。
看一下Cassandra Unit
在使用JUnit测试时,您还可以构建自己的测试规则,让您完全控制Apache Cassandra的版本、运行时行为等。CassandraRule.java.

t0ybt7op

t0ybt7op3#

我知道这是一个老主题但是有两种方法可以将嵌入式Cassandra与Spring结合使用。

1.第一种方法是使用Cassandra单位Spring

我已经创建了一个示例应用程序,您可以查看下面的Github存储库。

注意:嵌入式服务器从9142端口启动,而不是从9042端口启动!!!

2.第二种方法是使用***maven-plugin***

步骤1:

将以下maven插件添加到pom.xml

<plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cassandra-maven-plugin</artifactId>
                <version>3.6</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>start</goal>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <startNativeTransport>true</startNativeTransport>
                </configuration>
            </plugin>

步骤2:

在项目的根目录下创建cassandra/cql目录。嵌入式Cassandra服务器将从该目录初始化数据库。

重要提示:此目录中得所有文件都是.cql文件.

  • 示例:cassandra/cql/加载.cql*
    步骤3:

创建集成测试。

重要提示:****surfire插件仅将带有IT后缀的测试类解释为集成测试。
步骤4:
***mvn verify
*运行集成测试

jm2pwxwz

jm2pwxwz4#

OP的解决方案不再适用于最新版本的Sping Boot ,因为CassandraUnitDependencyInjectionTestExecutionListener来自于只能与JUnit 4一起工作的cassandra-unit-spring,而世界已经转移到了JUnit 5。
我已经创建了一个cassandra-unit-spring库,用于启动Cassandra服务器,并使端口作为Sping Boot 环境属性可用。

相关问题