Spring 引导数据嵌入式 Cassandra
Spring Boot Data Embedded Cassandra
在我的 Spring Boot 1.5.1 应用程序中,我将为 Cassandra 相关逻辑编写 unit/integration 测试。
我添加了以下 Maven 依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>
默认 Spring Boot Cassandra 配置将连接到真实的 Cassandra 数据库服务器。
Spring/Spring Boot 中是否有任何选项可以将我的测试配置为使用嵌入式 Cassandra 服务器?如果是这样,能否请您显示所需的配置。
Spring 引导中没有嵌入式 Apache Cassandra 支持,并且未计划。一方面对嵌入式 Apache Cassandra 的需求不大,另一方面,Apache Cassandra 自带很多依赖,与 Boot 的其他依赖冲突。
您还可以在使用 JUnit 测试时构建自己的测试规则,这样您就可以完全控制 Apache Cassandra 版本、运行时行为等。看一下可能的实现:CassandraRule.java.
我们在项目上使用Cassandra + Spring 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/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 进行的测试。
希望对你有帮助。
我知道这是一个老话题 但是 有两种方法可以将嵌入式 Cassandra 与 Spring 结合使用。
1。第一种方法是使用 Cassandra Unit 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 目录。
Embedded Cassandra 服务器将从该目录初始化您的数据库。
重要提示: 此目录中的所有文件都是 .cql 文件。
示例:cassandra/cql/load.cql
第 3 步:
创建集成测试。
重要:只有IT后缀的测试类被surfire[=64解释=] 插件作为集成测试。
第 4 步:
mvn 验证 到 运行 集成测试
OP 的解决方案不再适用于最新版本的 Spring Boot,因为 CassandraUnitDependencyInjectionTestExecutionListener
来自仅适用于 JUnit 4 的 cassandra-unit-spring,并且世界已经转移到JUnit 5.
我创建了一个 cassandra-unit-spring 库来启动 Cassandra 服务器并使端口可用作 Spring 引导环境属性。
在我的 Spring Boot 1.5.1 应用程序中,我将为 Cassandra 相关逻辑编写 unit/integration 测试。
我添加了以下 Maven 依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>
默认 Spring Boot Cassandra 配置将连接到真实的 Cassandra 数据库服务器。
Spring/Spring Boot 中是否有任何选项可以将我的测试配置为使用嵌入式 Cassandra 服务器?如果是这样,能否请您显示所需的配置。
Spring 引导中没有嵌入式 Apache Cassandra 支持,并且未计划。一方面对嵌入式 Apache Cassandra 的需求不大,另一方面,Apache Cassandra 自带很多依赖,与 Boot 的其他依赖冲突。
您还可以在使用 JUnit 测试时构建自己的测试规则,这样您就可以完全控制 Apache Cassandra 版本、运行时行为等。看一下可能的实现:CassandraRule.java.
我们在项目上使用Cassandra + Spring 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/application.properties 中,添加这个(请注意,嵌入式 cassandra 在端口 9142 上启动,但不是在默认端口 9042 上)
spring.data.cassandra.port=9142
spring.data.cassandra.keyspace-name=local_test
c) 在 src/test/resources
中创建空文件 bootstrap_test.cqld) 添加到您的 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 进行的测试。 希望对你有帮助。
我知道这是一个老话题 但是 有两种方法可以将嵌入式 Cassandra 与 Spring 结合使用。
1。第一种方法是使用 Cassandra Unit 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 目录。 Embedded Cassandra 服务器将从该目录初始化您的数据库。
重要提示: 此目录中的所有文件都是 .cql 文件。
示例:cassandra/cql/load.cql
第 3 步:
创建集成测试。
重要:只有IT后缀的测试类被surfire[=64解释=] 插件作为集成测试。
第 4 步:
mvn 验证 到 运行 集成测试
OP 的解决方案不再适用于最新版本的 Spring Boot,因为 CassandraUnitDependencyInjectionTestExecutionListener
来自仅适用于 JUnit 4 的 cassandra-unit-spring,并且世界已经转移到JUnit 5.
我创建了一个 cassandra-unit-spring 库来启动 Cassandra 服务器并使端口可用作 Spring 引导环境属性。